Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.07.11
Prihlásený: 13.03.12
Príspevky: 16
Témy: 4
Príspevok NapísalOffline : 09.07.2011 10:18

Ahoj, mam takúto funkciu:

Kód:
int vypis(int startp, int endp, char *ppo) {
   int i;
   for (i=startp; i<endp; i++) {   
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);
   }
   return 0;
}


Nefunguje mi to, neviem nájst chybu. Funkcia printf ma s vypisom problem.
Pole ppo je dvojrozmerne staticke pole ppo[1000][1].

Ďakujem


Online

Skúsený užívateľ
Skúsený užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 11.01.09
Prihlásený: 26.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 09.07.2011 11:35

Pouzivas nespravny parameter vo funkcii vypis.
Kód:
#include <stdio.h>
#include <stdlib.h>

char pole[1000][2];


int vypis(int startp, int endp, char ppo[][2])
{
   int i;
   for (i=startp; i<endp; i++) {
         printf( "znak pola ppo[%d][0] = %c\n",i, ppo[i][0] );
         printf("znak pola ppo[%d][1] = %c\n",i, ppo[i][1]);
   }
   return 0;
}


int main()
{

    pole[0][0] = 'a';
    pole[0][1] = 'b';
    pole[1][0] = 'c';
    pole[1][1] = 'd';

    vypis( 0, 2, pole );


    return 0;
}


Offline

Užívateľ
Užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 09.07.2011 14:29

V prvom rade ako vtupny parameter bude:

int vypis(int vyska, int sirka, char **ppo) a vypis rob cez dva cykli.

Kód:
for(v = 0; v<vyska;v++)
{
   for(h = 0; h<sirka;h++)
   {

   }
}



Inak dvojrozmerne polia sa moc nepouzivaju alebo vobec, staci ze vies, ze take nieco sa da.







_________________
Notebook: HP EliteBook 8740w
You can see my work in my www
Online

Skúsený užívateľ
Skúsený užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 11.01.09
Prihlásený: 26.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 09.07.2011 16:08

@johny3212: to nie je spravne riesenie. Nemozes ako parameter pouzit char** - to nie je to iste ako dvojrozmene pole.


Offline

Užívateľ
Užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 09.07.2011 20:33

Skus pouzit toto,zbuchal som take univerzalne riesenie. Kukni si ako to funguje.

Kód:
#include <stdio.h>
#include <stdlib.h>

void NaplnPole2D(char ** pole, int V, int H);
char **Calloc2(int V, int H);
void Free2(char ** pole, int V, int H);

void Free2(char ** pole, int V, int H)
    {
    int i;
    for (i = 0; i < V; i++)
   free(pole[i]);
    free(pole);
    }

char **Calloc2(int V, int H)
    {
    int p;
    char **pole = (char **) calloc(V, sizeof(char*));
    for (p = 0; p < V; p++)
   {
    pole[p] = (char *) calloc(H + 1, sizeof(char));
    pole[p][H] = '\0';
    }
return pole;
}

void NaplnPole2D(char ** pole, int V, int H)
{
int i, u;

for (i = 0; i < V; i++)
    {
printf("\n");
for (u = 0; u < H; u++)
    {
pole[i][u] = 'A';
printf("[%d][%d]=%c, ", i, u, pole[i][u]);
}
pole[i][H] = '\0';
}
}

int main(void)
{
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
const int V = 15;
const int H = 15;
char **pole = Calloc2(V, H);//[V][H]

NaplnPole2D(pole, V, H);

Free2(pole, V, H);
return EXIT_SUCCESS;
}








_________________
Notebook: HP EliteBook 8740w
You can see my work in my www
Online

Skúsený užívateľ
Skúsený užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 11.01.09
Prihlásený: 26.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 09.07.2011 20:52

Ak si to smeroval mne, tak tu uz robis rucnu alokaciu a to je rozdiel, ako:
Kód:
char pole[1000][2];

V takom pripade pole nemoze byt pretypovane na char**. Toto tvoje riesenie uz je spravne, ale myslim, ze je zbytocne komplikovane, za okolnosti, ze velkost jedneho elemntu pola je konstantna/fixna ( v tomto pripade 2 ).


Offline

Užívateľ
Užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 09.07.2011 22:26

Kod som smeroval pre v.tkac . Ja som mu dal riesenie, ake by som pouzil ja. Nech si vyberie :). Zalezi ci bude mat pevne danu velkost pola alebo ho bude aj menit to uz je na nom.







_________________
Notebook: HP EliteBook 8740w
You can see my work in my www
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.07.11
Prihlásený: 13.03.12
Príspevky: 16
Témy: 4
Príspevok Napísal autor témyOffline : 10.07.2011 11:37

Ahoj,
funkcia mala slúžiť pre kontrolu poľa. Pracujem v Pelles C a tam sa nedá zobraziť všetky premenné poľa(alebo neviem o tom ako to zapnúť), preto musím kontrolovať "ručne". Ten výpis mal byt taký že chcem napr. 15 - 22 prvok poľa ppo (alebo iného).

Zo súboru načítam text do poľa ppo[0][0] az ppo[n][0].
Prvky ppo[n][1] slúžia na označenie znaku.

Príklad načítaného textu do poľa:
ppo[0][0]='a'
ppo[0][1]='t'
ppo[1][0]='h'
ppo[1][1]='t'
ppo[2][0]='o'
ppo[2][1]='t'
ppo[3][0]='j'
ppo[3][1]='\n'
ppo[4][0]='\0'
ppo[4][1]='x'

vypis(1,3,ppo);

funkcia vypíše:

ppo[1][0]=h
ppo[1][1]=......t
ppo[2][0]=o
ppo[2][1]=......t
ppo[3][0]=j
ppo[3][1]=......t

(tie bodky tam nemajú byť)

Potreboval som označiť znaky, tak som to hodil do prvkov ppo[i][1]. Zatiaľ vymýšľam algoritmus, ako spracovať ten text. Dynamicky sa to pokúsim až keď budem vedieť algoritmus. Písať to ihneď dynamicky, taký dobrý niesom :). Jednoduché pole mi značne zjednodušuje situáciu.


Offline

Užívateľ
Užívateľ
funkcia pre vypis dvojrozmerneho pola v C

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 10.07.2011 12:22

Preco to robis takto komplikovane? Ved si sprav strukturu a do nej das informacie (znak,oznacenie), kt. potrebujes a potom vytvoris jednorozmerne pole z tej struktury. Vies co je struktura?







_________________
Notebook: HP EliteBook 8740w
You can see my work in my www
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 04.07.11
Prihlásený: 13.03.12
Príspevky: 16
Témy: 4
Príspevok Napísal autor témyOffline : 10.07.2011 12:47

Ďakujem za radu. Dynamická alokácia, programovať to budem ale neskôr, ale hodí sa mi to ako skvelý príklad. Mal som problém, uff, už viem kde. Chybná indexácia. Zasielam opravený kód.

Kód:
//najdednie nadpisu verzia 1.1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


FILE *f,*fw,*fvypis;   // definicia globnej premennej pre odkazovanie na subor
                     // pocet prvkov v subore je 20

int vypis(int startp, int endp) {
   for (i=startp; ((i<endp));i++){   //napokipruj pole poleZnakov do ppo
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);
   }
}


int main(void)
{
   int znak;

   int   pocetZnakov=0;
   int   pocetRiadkov=0;
   int   pom=0;
   int   i=0;
   int   r=0;   


   char poleZnakov[91];   //pole nesie znaky zo suboru
         poleZnakov[90]='\0';

   char ppo[92][2];      //pracovne pole so znakmi         
         ppo[90][1]='\0';
                     

//=============  otvorenie suboru a precitanie
 
   f = fopen("c:/subor1.txt", "r");      // otvorenie suboru na citanie
   if (f == NULL) {
      printf("Chyba pri otvarani suboru!\n");     
      return -1;
   }

   fvypis = fopen("c:/suborvypis.txt", "r");      // vypis pola
   if (f == NULL) {
      printf("Chyba pri otvarani suboru!\n");     
      return -1;
   }

   
   while ((znak = getc(f)) != EOF){      // citanie znak po znaku do konca
   //   putchar(znak);                  // vypis do konzoly
      pocetZnakov++;                  // potrebujeme pre dynamicke pole
      if (znak =='\n') pocetRiadkov++;     
   }
   if (znak==EOF) printf("\nUspesne otvorene a precitane\n");

   printf("\n --- Statistika suboru --- \n");         //statistika suboru
   printf("Subor mal pocet riadkov: %d\n",pocetRiadkov);
   printf("Subor mal pocet znakov: %d\n" ,pocetZnakov);
//   printf("Subor mal znakov a enterov spolu: %d\n" ,pocetRiadkov+pocetZnakov);
//   printf("Subor vsetkych znakov(CR a LF): %d\n" ,pocetRiadkov*2+pocetZnakov);
   printf(" -------------------------\n\n");



//=============  kopirovanie textu do pamati   
   rewind(f); r=0;                          //znovuotvorenie   
   printf("\n --- kopiruje sa subor do poleZnakov[] --- \n");
    while ( (znak = getc(f)) != EOF){      //vypis citanych znakov
      poleZnakov[i]=znak;               //kopiru text do poleZnakov[]               
      if (znak =='\n') r++;
      i++;
    }
   printf(" --- konec kopirovania, --- \n");
   poleZnakov[i] = '\0';                 // pole treba vzdy ukoncit
   printf(" --- index znaku \\0 bol %d \n\n",i);



   fw = fopen("c:/subor2.txt", "w");      // otvorenie suboru na zapis
   if (fw == NULL) {                  // osetrenie - kontrola otvorenia
       printf("Chyba pri otvarani 2.suboru!\n");     
       return -1;
   }


// ================== program

printf(" --- cyklus pre kopirovanie znakov --- \n");
//inicializacia pracovneho pola a premennych pracovneho pola (ppo)

   for (i=0; i<25 ;i++){   //napokipruj pole poleZnakov do ppo   
      if (i<pocetZnakov) { //pocetZnakov hovori, kolky prvok obsahuje \0 v poleZnakov
         ppo[i][0]=poleZnakov[i];
         ppo[i][1]='s';      
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);
      }
      else {//ak sa uz objavil v poleZnakov znako \0, nastav zvysnym ppo[i][1]='x'
         ppo[i][0]='\0';
         ppo[i][1]='x';
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);
      }
   } i=0;



   printf("\nvypis pola (kontrolujeme ci tam mame co chceme)\n");   
   for (i=0; i<25; i++){   
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);
   }
 
   printf("\nkonec vypisu (kontroly)/// \n"); i=0;



//hladame v texte nadpisy, ktore sme si oznacili znakom ==
                                 //je na prvom riadku nadpis?
   if (ppo[0][0]=='=' && ppo[1][0]=='=') { //prve dva znaky musia byt ==
      printf("\nPrvy radek je nadpis!\n");
      pom=0;
      while ( ppo[pom][0]!='\n') {
         pom++;      
      
      }   //spocitaj znaky na riadku,aby sme vedeli kde zacina dalsi radek

      printf("\nnapocitalo %d znakov\n\n",pom);


   printf("\nvypis pola po porovnani\n");   
   for (i=0; i<25; i++){   
         printf("znak pola ppo[%d][0] = %c\n",i, ppo[i][0]);
         printf("znak pola ppo[%d][1] =     %c\n",i, ppo[i][1]);   
   } printf("\nkonec vypisu po porovnani \n"); i=0;


      }//citaj len do konca riadka
   

// ================== koniec programu   

   if (znak==EOF) printf("\nkoniec cyklu\n");
   if ((fclose(f)) == EOF)                     //kontrola zavretia
   printf("Chyba pri zatvoreni souboru pre citanie!\n");
   if ((fclose(fw)) == EOF)                     //kontrola zavretia
   printf("Chyba pri zatvoreni souboru pre zapis!\n");
   if ((fclose(fvypis)) == EOF)                     //kontrola zavretia
   printf("Chyba pri zatvoreni souboru pre citanie!\n");
  return 0;   
}


Asi sa dá z kódu porozumieť, že text v súbore bude nejako označený, a sním budem narábať ďalej.


Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. c dynamická alokácia dvojrozmerného poľa

v Assembler, C, C++, Pascal, Java

4

511

02.05.2017 20:47

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. deklarovanie dvojrozmerneho pola s operatorom new

v Assembler, C, C++, Pascal, Java

10

991

28.12.2008 23:56

neutronmind Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypis udajov do pola

v JavaScript, VBScript, Ajax

12

719

27.07.2010 17:50

camo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypis do iframe z textoveho pola

v HTML, XHTML, XML, CSS

6

600

23.06.2007 17:18

megdesign Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [C] Výpis zo súboru do pola

v Assembler, C, C++, Pascal, Java

2

442

05.11.2012 20:53

ado130 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. algoritmus na vypis pola v danej podobe

v PHP, ASP

1

417

09.05.2011 11:40

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. funkcia pre input v skrytom dive

v JavaScript, VBScript, Ajax

2

380

04.12.2010 12:15

DeeJay3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. strstr PHP funkcia ale pre viac stringov

v PHP, ASP

4

591

08.08.2018 13:55

baumax Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vrátenie pola

v Assembler, C, C++, Pascal, Java

2

444

08.11.2012 19:01

faraon Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. dlžka pola

v HTML, XHTML, XML, CSS

2

539

16.10.2009 22:40

dessert Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. INDEX POLA

v JavaScript, VBScript, Ajax

1

661

15.10.2009 11:39

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. uvolnenie pola

v Assembler, C, C++, Pascal, Java

8

478

10.01.2010 20:18

johny3212 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C naplnenie pola

v Assembler, C, C++, Pascal, Java

3

851

11.12.2011 15:34

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Doplňovanie input poľa

v JavaScript, VBScript, Ajax

2

566

28.08.2008 13:54

tatysp Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Upravenie vypisu pola ..

v PHP, ASP

3

447

01.07.2009 17:05

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Identifikácia prvku poľa

v PHP, ASP

4

564

12.03.2009 22:49

cube2 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra