Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: only.cheez 11 Listopadu 2010, 19:14:35
-
Zdravím, můžete někdo prosím poradit jak mám v Céčku naplnit hodnotami statické 2D pole ve funkci.
Jak mají vypadat formální a jak skutečné parametry?
-
Zkus to napsat na prikladu, nechapu, co presne myslis. Nevis si rady s pouzitim ukazatelu, nebo tak nejak?
-
Jestli chceš vypsat vše ručně tak můžeš při alokaci
int foo[2][2] = { {1, 2}, {2, 3} };
Nebo v cyklu třeba
int foo[5][5];
int i, j;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
foo[i][j] = i*j; /* Napriklad */
}
}
Nějak nerozumím té funkci co potřebuješ ?
Chceš předat funkci to pole a vrátit ho s hodnotami ?
-
příklad:
...
void nactiMatici(double *matice[][10]){ /* co tady? (takhle asi ne) */
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++) scanf("%lf",*matice[i][j]); /* tady */
}
int main(){
double matice[10][10];
nactiMatici(&matice); /* a co zde? */
...
Jde o to, aby ta matice byla výstupním parametrem.
-
#include <stdio.h>
#include <stdlib.h>
void nactiMatici(int ** matrix);
int main()
{
int i, j;
int ** foo = (int **) malloc(2 * sizeof(int*));
for (i = 0; i < 2; i++) {
foo[i] = (int *) malloc(2 * sizeof(int));
}
nactiMatici(foo);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
printf("%d ", foo[i][j]);
}
putchar('\n');
}
for (i = 0; i < 2; i++) {
free(foo[i]);
}
free(foo);
return 0;
}
void nactiMatici(int ** matrix)
{
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
printf("Zadej pozici %d-%d: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
}
-
#include <stdio.h>
#include <stdlib.h>
void nactiMatici(int ** matrix);
int main()
{
int i, j;
int ** foo = (int **) malloc(2 * sizeof(int*));
for (i = 0; i < 2; i++) {
foo[i] = (int *) malloc(2 * sizeof(int));
}
nactiMatici(foo);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
printf("%d ", foo[i][j]);
}
putchar('\n');
}
for (i = 0; i < 2; i++) {
free(foo[i]);
}
free(foo);
return 0;
}
void nactiMatici(int ** matrix)
{
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
printf("Zadej pozici %d-%d: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
}
Pekny priklad.
nemuzu si pomoct, ale pripomina mi to posledni 2 ulohy na Progtestu :D
-
Nevím co je Progtest, ale mě to připomíná kód, kterej jsem splácal před půl hodinou ;D
-
Nevím co je Progtest, ale mě to připomíná kód, kterej jsem splácal před půl hodinou ;D
Bud rad, ze nevis co to je :D
jestli nekdy navstivis CVUT FEL/FIT za ucelem studia, tak se s nim potkas :D
-
Nevím co je Progtest, ale mě to připomíná kód, kterej jsem splácal před půl hodinou ;D
Bud rad, ze nevis co to je :D
jestli nekdy navstivis CVUT FEL/FIT za ucelem studia, tak se s nim potkas :D
Jo už vím, kámošovi jsem kdysi pomáhal, když tam byl. Mě stačí to co mám na UP v Olomouci :)
-
Díky, za odpoveď. Ještě malý dotaz, jestli jsem to správně pochopil.
Ta proměnná foo je vlastně pole ukazatelů na řádky té matice, že?
A v tom for cyklu hned pod její definicí se do ní ukládají ukazatele na ty řádky
Jo, a já se teď skutečně peru s progtestem...
-
Díky, za odpoveď. Ještě malý dotaz, jestli jsem to správně pochopil.
Ta proměnná foo je vlastně pole ukazatelů na řádky té matice, že?
A v tom for cyklu hned pod její definicí se do ní ukládají ukazatele na ty řádky
Jo, a já se teď skutečně peru s progtestem...
V tom cyklu je alokace paměti pro jednotlivé řádky :)
-
Díky, za odpoveď. Ještě malý dotaz, jestli jsem to správně pochopil.
Ta proměnná foo je vlastně pole ukazatelů na řádky té matice, že?
A v tom for cyklu hned pod její definicí se do ní ukládají ukazatele na ty řádky
Jo, a já se teď skutečně peru s progtestem...
jj, foo je ukazatel na ukazatel na int, v tom cyklu se alokuje pamet pro jednotlive radky (respektive pro hodnoty v radcich)
Kazdopadne preju hodne stesti a dej si pozor na ruzne vychcanosti (predpokladam, ze resis ulohu 4) jako
0 0 0
0 0 4
(nema reseni)
a na preteceni doublu..
uff Premet byl zas rychlejsi :D
-
jj, rešim čtyřku, tak díky za tipy.
A jinak, děkuji za rady všem.
-
....
uff Premet byl zas rychlejsi :D
No to víš, my na UPOLU se neflákáme ;D