Witam. Mam za zadanie napisać program, który wczytuje macierz, każdy jej element podnosi do potęgi, liczy sumę elementów w poszczególnych wierszach, a na koniec sumę wszystkich wierszy.
Mój kod wygląda następująco:
#include
#include
#include
#include
#include
void wczytajMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
for(j=0; j
{
printf("Podaj element tab[%d][%d]: ", i, j);
scanf("%d", &tab[i][j]);
}
}
void wypiszMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
{
for(j=0; j
printf("%4d", tab[i][j]);
printf("\n");
}
}
int sumka(int n, int tab[100][100])
{
printf("Suma poszczegolnych wierszy:\n");
int max=0;
int i, j, sum, sum2=0;
for(i=0; i
{
sum=0;
for(j=0;j
{
sum+=tab[i][j]*tab[i][j];
sum2+=sum;
}
printf("%d\n", sum);
}
printf("Wynik: %d\n", sum2);
return 0;
}
int main()
{
int tab1[100][100];
int n;
printf("Podaj wielkosc macierzy: ");
if(!(scanf("%d", &n)==1 && getchar()=='\n'))
printf("Zle dane!!");
printf("\n");
wczytajMacierz(n, tab1);
printf("\n");
wypiszMacierz(n, tab1);
printf("\n");
sumka(n, tab1);
getch();
return 0;
}
Problem w tym, że nie mam pojęcia dlaczego funkcja niepoprawnie sumuje sumy wszystkich wierszy macierzy.
Obie sumy zwiększasz co obrót wewnętrznej pętli. sum2 (wnioskuje, że to suma całościowa) powinno być na zewnątrz tej pętli. Wiersz dodaje się tylko raz, jak zsumuje się wszystkie elementy znajdujące się w nim.
#include
#include
#include
#include
#include
void wczytajMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
for(j=0; j
{
printf("Podaj element tab[%d][%d]: ", i, j);
scanf("%d", &tab[i][j]);
}
}
void wypiszMacierz(int n, int tab[100][100])
{
int i, j;
for(i=0; i
{
for(j=0; j
printf("%4d", tab[i][j]);
printf("\n");
}
}
int sumka(int n, int tab[100][100])
{
printf("Suma poszczegolnych wierszy:\n");
int max=0;
int i, j, sum, sum2=0;
for(i=0; i
{
sum=0;
for(j=0;j
sum+=tab[i][j]*tab[i][j];
sum2+=sum;
printf("%d\n", sum);
}
printf("Wynik: %d\n", sum2);
return 0;
}
int main()
{
int tab1[100][100];
int n;
printf("Podaj wielkosc macierzy: ");
if(!(scanf("%d", &n)==1 && getchar()=='\n'))
printf("Zle dane!!");
printf("\n");
wczytajMacierz(n, tab1);
printf("\n");
wypiszMacierz(n, tab1);
printf("\n");
sumka(n, tab1);
getch();
return 0;
}
Akurat dzisiaj trochę się mi nudziło, więc może dla spojrzenia z innego kąta załączam kod :
#include
#include
#include
const int r = 100;
void wczytaj_macierze(int n, int tab[r][r]){
int i,j;
printf("Podaj elementy : \n");
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("Podaj element [%d][%d] = ",i,j);
scanf("%d",&tab[i][j]);
}
}
}
void wyswietl_macierze(int n, int tab[r][r]){
printf("TABLICA : \n");
int i, j;
for(i=0; i
for(j=0; j
printf("%4d", tab[i][j]);
printf("\n");
}
}
int potega(int p, int w){
int podst = p, i;
for (i = 0; i < w - 1; i++)
podst *= p;
return podst;
}
void do_potegi_n_plus_suma_wszystkich_wierszy(int n,int p, int tab[r][r]){
int i, j,suma = 0;
for(i=0; i
for(j=0; j
suma += potega(tab[i][j], p);
}
printf("Suma wszystkich rekordow po podniesieniu do potegi %d wynosi : %d \n", p,suma);
}
void suma(int n, int rec, int tab[r][r]){
int i = rec , j, suma = 0;
for (j = 0; j < n; j++)
suma += tab[i][j];
printf("Suma z podanego rekordu wynosi : %d \n", suma);
}
int main(void){
int tab[100][100];
int n;
printf("Podaj liczbe elementow : ");
scanf("%d", &n);
if (n <= 1){
printf("Zle dane!");
return 1;
}
printf("Jakiego rekordu chcesz z sumowac liczy : ");
int rec;
scanf("%d", &rec);
if (rec > n || rec < 0){
printf("Blad !");
return 1;
}
printf("Do, ktorej potegi chcesz podniesc liczby w tablicy ? : ");
int a;
scanf("%d",&a);
wczytaj_macierze(n,tab);
wyswietl_macierze(n,tab);
suma(n,rec,tab);
do_potegi_n_plus_suma_wszystkich_wierszy(n,a,tab);
getch();
return 0;
}