Cześć!
Mam program do wypełniania tablicy dynamicznej o zadanym rozmiarze liczbami będącymi iloczynem ich indeksów a potem zamiany ich znaków.
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,m,i,j;
int *tab;
printf("Podaj liczbe wierszy:");
scanf("%d",&n);
printf("Podaj liczbe kolumn:");
scanf("%d",&m);
printf ("\nZawartosc oryginalna:\n");
tab = (int*)malloc((n*m) * sizeof *tab);
for(i=0;i<=(n-1);i++)
for(j=0;j<=(m-1);j++)
*(tab+(i*m)+j)=(i*j);
for(i=0;i<=(n-1);i++){
for(j=0;j<=(m-1);j++)
printf("%3d ",*(tab+(i*m)+j));
printf("\n");
}
printf ("Zawartosc po zmianie znakow:\n");
{
for(i=0;i<=(n-1);i++)
for(j=0;j<=(m-1);j++)
*(tab+(i*m)+j)=-(i*j);
for(i=0;i<=(n-1);i++)
{
for(j=0;j<=(m-1);j++)
printf("%3d ",*(tab+(i*m)+j));
printf("\n");
}
return 1;
}
}
I działa dobrze.
Nie umiem jednak zrobić rzeczy z pozoru prostszej, czyli tego samego dla tablicy statycznej. Chcę, żeby tablica zawsze była np. 5x5, więc robię tak:
/* Wypełnienie elementów tablicy dwuwymiarowej (o wymiarze podanym jako parametr funkcji) liczbami będącymi iloczynem ich indeksów. */
#include<stdio.h>
#include<stdlib.h>
int main(){
int n=5,m=5,i,j;
int tab[n][m];
printf ("\nZawartosc oryginalna:\n");
for(i=0;i<=(n-1);i++)
for(j=0;j<=(m-1);j++)
*(tab+(i*m)+j)=(i*j);
for(i=0;i<=(n-1);i++){
for(j=0;j<=(m-1);j++)
printf("%3d ",*(tab+(i*m)+j));
printf("\n");
}
printf ("Zawartosc po zmianie znakow:\n");
{
for(i=0;i<=(n-1);i++)
for(j=0;j<=(m-1);j++)
*(tab+(i*m)+j)=-(i*j);
for(i=0;i<=(n-1);i++)
{
for(j=0;j<=(m-1);j++)
printf("%3d ",*(tab+(i*m)+j));
printf("\n");
}
return 1;
}
}
Odpowiedź kompilatora:
11:17 error: incompatible types when issigning to type 'int [(unsigned int)(m)]' from type 'int'
identycznie w
21:17
Co jest źle?
Pozdrawiam.