Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: C, naplnění matice ve funkci [vyřešeno]  (Přečteno 4318 krát)

only.cheez

  • Návštěvník
  • Příspěvků: 16
C, naplnění matice ve funkci [vyřešeno]
« kdy: 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?
« Poslední změna: 11 Listopadu 2010, 21:06:31 od bidloj »

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re: C, naplnění matice ve funkci
« Odpověď #1 kdy: 11 Listopadu 2010, 19:28:40 »
Zkus to napsat na prikladu, nechapu, co presne myslis. Nevis si rady s pouzitim ukazatelu, nebo tak nejak?
Tak dlouho se vrzá s Acerem, až se displej utrhne.

premet

  • Host
Re: C, naplnění matice ve funkci
« Odpověď #2 kdy: 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 ?
« Poslední změna: 11 Listopadu 2010, 19:35:39 od Honza Grulich »

only.cheez

  • Návštěvník
  • Příspěvků: 16
Re: C, naplnění matice ve funkci
« Odpověď #3 kdy: 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.

premet

  • Host
Re: C, naplnění matice ve funkci
« Odpověď #4 kdy: 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]);
   
         }
       
     }
 
}

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re: C, naplnění matice ve funkci
« Odpověď #5 kdy: 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
Tak dlouho se vrzá s Acerem, až se displej utrhne.

premet

  • Host
Re: C, naplnění matice ve funkci
« Odpověď #6 kdy: 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

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re: C, naplnění matice ve funkci
« Odpověď #7 kdy: 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
Tak dlouho se vrzá s Acerem, až se displej utrhne.

premet

  • Host
Re: C, naplnění matice ve funkci
« Odpověď #8 kdy: 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  :)

only.cheez

  • Návštěvník
  • Příspěvků: 16
Re: C, naplnění matice ve funkci
« Odpověď #9 kdy: 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...

premet

  • Host
Re: C, naplnění matice ve funkci
« Odpověď #10 kdy: 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  :)

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re: C, naplnění matice ve funkci
« Odpověď #11 kdy: 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
Tak dlouho se vrzá s Acerem, až se displej utrhne.

only.cheez

  • Návštěvník
  • Příspěvků: 16
Re: C, naplnění matice ve funkci
« Odpověď #12 kdy: 11 Listopadu 2010, 21:05:04 »
jj, rešim čtyřku, tak díky za tipy.

A jinak, děkuji za rady všem.

premet

  • Host
Re: C, naplnění matice ve funkci [vyřešeno]
« Odpověď #13 kdy: 11 Listopadu 2010, 21:10:56 »
....
uff Premet byl zas rychlejsi :D
No to víš, my na UPOLU se neflákáme  ;D

 

Provoz zaštiťuje spolek OpenAlt.