Dynamická matice
Moderátor: Moderátoři
Dynamická matice
#include <stdio.h>
#include <stdlib.h>
}
Velous píše:Zdravím, mám za úkol udělat program, ve kterém budu za běhu programu zadávat počet řádku a sloupců matice a budou se tisknout náhodná čísla ve formě matice. Prosím poraďte. Díky. Zatím mám jen toho a nevím jak dál:
Zkusím opravit, čeho jsem si tak všiml, ale nevím, jestli je to všechno:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int sloupce, radky, i;
int *PrvkyvMatici=radky*sloupce;
Tohle je blbost. Typ proměnné PrvkycMatici je ukazatel na int, ale má obsahovat počet prvků, takže by měla být typu int. Taky je blbost počítat ten součin tady, když v těch proměnných radky a sloupce ještě nemáš správné hodnoty. To musíš udělat až pak. Takže zde bych napsal:
int PrvkyvMatici;
srand(time(0));
printf("\n Program pro generovani dynamicke matice"
"\n ------------------------------------------- ");
printf("\n Zadejte pocet radku matice : ");
scanf("%d", &radky);
printf("\n Zadejte pocet sloupcu matice : ");
scanf("%d", &sloupce);
Tady bych teprve spočítal ten počet prvků:
PrvkyvMatici = radky * sloupce;
int matice=(int*) malloc (*PrvkyvMatici * sizeof(int));
Před tím PrvkyvMatici nemá být hvězdička, už to není ukazatel.
if(matice != NULL)
{
for(i=0; i<PrvkyvMatici; i++)
{
printf("%i\n",(matice + i));
Ten výraz matice+i vrací ukazatel na ten prvek. Pokud chceš jeho hodnotu, musíš přidat hvězdičku:
*(matice + i)
To samé lze také zapsat čitelněji:
matice[i]
Ovšem, ty tiskneš hodnotu v matici, ale žádnou jsi do ní nedal, takže tam budou jen nějaké blbosti.
Nejdřív bys to měl asi naplnit.
}
}
free(matice);
return 0;
}
Andrea píše:A určitě je nutné tu matici cpát do paměti, když zadání je zobrazit náhodná čísla ve formě matice?
a co když bude požadavek tu samou matici zobrazit dvakrát? nebo jednou od prvního členu a pak od posledního. Smysl toho cvičení je nejspíš provětrat znalosti s používáním ukazatelů a práce s pamětí
Kód: Vybrat vše
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
int** matice, radky=3, sloupce=4, prvek=5;
// ------ vektor pointeru na radky ---------
matice = (int**)calloc(radky, sizeof(int*));
if(matice == NULL)
{
printf("Nedostatek pameti\n");
exit(1);
}
// ----------- alokace radku -----------
for(int i=0; i<radky; i++)
{
matice[i] = (int*)calloc(sloupce, sizeof(int));
if(matice[i] == NULL)
{
printf("Nedostatek pameti\n");
exit(1);
}
}
// ----- pouziti matice s beznou syntaxi pro pole -----
matice[1][2] = prvek;
printf("Prvek = %d\n", matice[1][2]);
return 0;
}