| | |
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 04.07.11 Prihlásený: 13.03.12 Príspevky: 16 Témy: 4 | Napísal v.tkac: 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
|
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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; }
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 09.07.2011 16:08 | |
|
@johny3212: to nie je spravne riesenie. Nemozes ako parameter pouzit char** - to nie je to iste ako dvojrozmene pole.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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 ).
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
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 |
|
Registrovaný: 04.07.11 Prihlásený: 13.03.12 Príspevky: 16 Témy: 4 | Napísal autor témy v.tkac: 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.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
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 |
|
Registrovaný: 04.07.11 Prihlásený: 13.03.12 Príspevky: 16 Témy: 4 | Napísal autor témy v.tkac: 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.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| c dynamická alokácia dvojrozmerného poľa v Assembler, C, C++, Pascal, Java | 4 | 511 | 02.05.2017 20:47 BX | | deklarovanie dvojrozmerneho pola s operatorom new v Assembler, C, C++, Pascal, Java | 10 | 991 | 28.12.2008 23:56 neutronmind | | Vypis udajov do pola v JavaScript, VBScript, Ajax | 12 | 719 | 27.07.2010 17:50 camo | | Vypis do iframe z textoveho pola v HTML, XHTML, XML, CSS | 6 | 600 | 23.06.2007 17:18 megdesign | | [C] Výpis zo súboru do pola v Assembler, C, C++, Pascal, Java | 2 | 442 | 05.11.2012 20:53 ado130 | | algoritmus na vypis pola v danej podobe v PHP, ASP | 1 | 417 | 09.05.2011 11:40 stenley | | funkcia pre input v skrytom dive v JavaScript, VBScript, Ajax | 2 | 380 | 04.12.2010 12:15 DeeJay3 | | strstr PHP funkcia ale pre viac stringov v PHP, ASP | 4 | 591 | 08.08.2018 13:55 baumax | | vrátenie pola v Assembler, C, C++, Pascal, Java | 2 | 444 | 08.11.2012 19:01 faraon | | dlžka pola v HTML, XHTML, XML, CSS | 2 | 539 | 16.10.2009 22:40 dessert | | INDEX POLA v JavaScript, VBScript, Ajax | 1 | 661 | 15.10.2009 11:39 Ďuri | | uvolnenie pola v Assembler, C, C++, Pascal, Java | 8 | 478 | 10.01.2010 20:18 johny3212 | | C naplnenie pola v Assembler, C, C++, Pascal, Java | 3 | 851 | 11.12.2011 15:34 Fico | | Doplňovanie input poľa v JavaScript, VBScript, Ajax | 2 | 566 | 28.08.2008 13:54 tatysp | | Upravenie vypisu pola .. v PHP, ASP | 3 | 447 | 01.07.2009 17:05 stenley | | Identifikácia prvku poľa v PHP, ASP | 4 | 564 | 12.03.2009 22:49 cube2 |
| 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
|
|