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

Název: C, naplnění matice ve funkci [vyřešeno]
Přispěvatel: 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?
Název: Re: C, naplnění matice ve funkci
Přispěvatel: Šuohob 11 Listopadu 2010, 19:28:40
Zkus to napsat na prikladu, nechapu, co presne myslis. Nevis si rady s pouzitim ukazatelu, nebo tak nejak?
Název: Re: C, naplnění matice ve funkci
Přispěvatel: premet 11 Listopadu 2010, 19:29:53
Jestli chceš vypsat vše ručně tak můžeš při alokaci
Kód: [Vybrat]
int foo[2][2] = { {1, 2}, {2, 3} };

Nebo v cyklu třeba
Kód: [Vybrat]
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 ?
Název: Re: C, naplnění matice ve funkci
Přispěvatel: only.cheez 11 Listopadu 2010, 19:51:57
příklad:
Kód: [Vybrat]
...
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.
Název: Re: C, naplnění matice ve funkci
Přispěvatel: premet 11 Listopadu 2010, 20:01:11
Kód: [Vybrat]
#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]);
   
         }
       
     }
 
}
Název: Re: C, naplnění matice ve funkci
Přispěvatel: Šuohob 11 Listopadu 2010, 20:36:19
Kód: [Vybrat]
#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
Název: Re: C, naplnění matice ve funkci
Přispěvatel: premet 11 Listopadu 2010, 20:39:14
Nevím co je Progtest, ale mě to připomíná kód, kterej jsem splácal před půl hodinou  ;D
Název: Re: C, naplnění matice ve funkci
Přispěvatel: Šuohob 11 Listopadu 2010, 20:40:33
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
Název: Re: C, naplnění matice ve funkci
Přispěvatel: premet 11 Listopadu 2010, 20:45:53
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  :)
Název: Re: C, naplnění matice ve funkci
Přispěvatel: only.cheez 11 Listopadu 2010, 20:48:30
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...
Název: Re: C, naplnění matice ve funkci
Přispěvatel: premet 11 Listopadu 2010, 20:55:49
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  :)
Název: Re: C, naplnění matice ve funkci
Přispěvatel: Šuohob 11 Listopadu 2010, 20:58:01
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
Název: Re: C, naplnění matice ve funkci
Přispěvatel: only.cheez 11 Listopadu 2010, 21:05:04
jj, rešim čtyřku, tak díky za tipy.

A jinak, děkuji za rady všem.
Název: Re: C, naplnění matice ve funkci [vyřešeno]
Přispěvatel: premet 11 Listopadu 2010, 21:10:56
....
uff Premet byl zas rychlejsi :D
No to víš, my na UPOLU se neflákáme  ;D