Stránka: 1 z 1
| [ Príspevkov: 19 ] | |
Autor | Správa |
---|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
Mam problem s jednym programom v Cecku, v programovani som amater, nakoniec sa mi vsak podarilo dat nejako dokopy jednoduchy program co potrebujem do skoly. Problem je ze vypisuje error pri predposlednom break-u , neviem s tym pohnut...
Kód: #include <stdio.h> #include <stdlib.h> void nacitanieM(int x,int y,int A[x][y]); void vypisM(int x,int y,int A[x][y]); void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]); int main()
{ int volba; int a,m,n; printf("Pre vypocet suctu dvoch cisel stlac 1 : \n"); printf("Pre vypocet rozdielu dvoch cisel stlac 2 : \n"); printf("Pre vypocet nasobku dvoch cisel stlac 3: \n"); printf("Pre vypocet podielu dvoch cisel stlac 4: \n"); printf("Pre vypocet suctu dvoch n-romernych matic stlac 5: \n"); scanf("%d",&volba); switch (volba) { case '1': printf("bola zadana volba 1\n"); int sucet(int a,int b) { int s; s=a+b; return s; }; break;
case '2': printf("bola zadana volba 2\n"); int rozdiel(int a,int b) { int r; r=a-b; return r; }; break;
case '3': printf("bola zadana volba 3\n");
int sucin(int a,int b) { int s; s=a*b; return s; }; break;
case '4': printf("bola zadana volba 4\n"); float podiel(float a,float b) { float p; p=a/b; return p; }; break;
case '5': printf("bola zadana volba 5\n"); printf("Zadaj pocet stlpcov matice\n"); scanf("%d",&m); printf("Zadaj pocet riadkov matice\n"); scanf("%d",&n); int D[m][n],E[m][n],F[m][n]; nacitanieM(m,n,D); nacitanieM(m,n,E); printf("Matica A:\n"); vypisM(m,n,D); printf("\n\n Matica B:\n"); vypisM(m,n,E); sucetM(m,n,D,E,F); printf("\n\nSucet matic je :\n"); vypisM(m,n,F); getch(); return 0; } void nacitanieM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++)
A[i][j]=rand ()%100; } void vypisM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) {printf("\n"); for (j=0;j<y;j++)
printf("%d\t",A[i][j]); }}
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++) C[i][j]=A[i][j]+B[i][j]; } break; default: printf("bolo zadane zle cislo/znak ! \n"); break; } }
Diíky za vase rady ..
|
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | 13 |
osad si nejaku tu syntax a nauc sa stabnu strukturu, pozrel som iba void sucetM(....) ale absolutne tam nesedia zatvorky. Ak spravne vidim tak riadkom C[i][j]=A[i][j]+B[i][j]; } ukoncis funkciu sucetM(...) a dalsie prikazy su mimo funkcie, co nemozu byt. Mimo funkcie mozu byt iba deklaracie...
asi vela pre tena neznamych slov som pouzil, tak v skratke:
skus pisat tak, aby sa to dalo prehladnejsie citat.
vo spominam riadku absolutne nesedia zatvorky: {} (tri si } a jedna {.
_________________ Učet je neaktívny. |
|
Registrovaný: 19.09.06 Prihlásený: 09.01.25 Príspevky: 749 Témy: 31 | 31 Bydlisko: Ružomberok&... |
je to pisane velmi zvlastne, tie dve zatvorky co vidis na konci patria funkcii main, a ta tretia } od konca je ukoncovacia zatvorka tej funkcie a prikazy za nou su pokracovanie switchu zo zaciatku programu. Fakt sa v tom neda vyznat. povkladal si funkcie a ich tela do mainu, nikde nenacitavas tie cisla, na ktorych chces previest operacie, nikde ich nevypisujes, mas tam odveci funkcie, ktore mozu byt nahradene jednym riadkom v polovici pripadov.
|
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | 13 |
ak spravne vidim, tak fakt mas funkcie definovane vo fukcii main. Myslim, ze to umoznuje iba pascal.
Ak vies co je funkcia, tak kazda funkcia musi byt definova osobitne, teda ju das mimo fukncie main a do main das iba jej nazov a parametre
_________________ Učet je neaktívny. |
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 | 3 |
Podla noveho standardu ISO mozu byt funkcie definovane v tele funkcie main, aj ked sa mi to zda byt zbytocne a neprehladne, tak, ako aj tvoj kod. ![:-)](https://www.pcforum.sk/images/smilies/smile04.gif)
|
|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
stopa27 píše: je to pisane velmi zvlastne, tie dve zatvorky co vidis na konci patria funkcii main, a ta tretia } od konca je ukoncovacia zatvorka tej funkcie a prikazy za nou su pokracovanie switchu zo zaciatku programu. Fakt sa v tom neda vyznat. povkladal si funkcie a ich tela do mainu, nikde nenacitavas tie cisla, na ktorych chces previest operacie, nikde ich nevypisujes, mas tam odveci funkcie, ktore mozu byt nahradene jednym riadkom v polovici pripadov.
Ano ja viem je to hrozne, som lama, moj najdlhsi program mal vzdy 20riadkov a teraz toto ![:D](https://www.pcforum.sk/images/smilies/smile01.gif) ale k veci , funkcie som uz vybral pred main() a do mainu som dal vypisy, avsak stale mi pise chybu v predposlednom breaku (break statement not within loop or switch) ...
|
|
Registrovaný: 16.02.08 Prihlásený: 08.12.10 Príspevky: 235 Témy: 13 | 13 |
vsetko zacina snahou ![;)](https://www.pcforum.sk/images/smilies/smile03.gif)
_________________ Učet je neaktívny. |
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 | 3 |
To bude preto, ze tam ten break nema byt ![:)](https://www.pcforum.sk/images/smilies/smile02.gif) Je mimo cyklu/switchu. Asi si to tam nejak zle uzatvorkoval... ![;)](https://www.pcforum.sk/images/smilies/smile03.gif)
|
|
Registrovaný: 21.06.07 Prihlásený: 06.05.13 Príspevky: 421 Témy: 4 | 4 |
Ak robis v nejakom VisualSudiu a nezdaju sa Ti zatvorky, tak chod kurzorom pred zatvorku a stlac <Ctrl + ]> ... (Control a pravu hranatu zatvorku);
kurzor Ti bude "skakat" na otvaraciu/zatvaraciu zatvorku.
|
|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
Tak som sa snazil to spravit ale nepodarilo sa, zatvorky som kontroloval niekolko krat, a vsetko sedi, fakt neviem preco to nexce ist... ![:(](https://www.pcforum.sk/images/smilies/smile18.gif)
|
|
Registrovaný: 19.09.06 Prihlásený: 09.01.25 Príspevky: 749 Témy: 31 | 31 Bydlisko: Ružomberok&... |
mas na vyber : hod sem svoj kod a uvidime preco ti to nejde, alebo ti sem ja hodim tvoj povodny "trochu" upraveny kod, ktory funguje. Myslim ze ked pre nic ine, tak preto ze si to napisal ti treba pomoct.
|
|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
Tak tu to je : Kód: #include <stdio.h> #include <stdlib.h> void nacitanieM(int x,int y,int A[x][y]); void vypisM(int x,int y,int A[x][y]); void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]); int sucet(int g,int h) { int s; s=g+h; return s;}; int rozdiel(int g,int h) { int r; r=g-h; return r;}; int sucin(int g,int h) { int s; s=g*h; return s;}; float podiel(float g,float h) { float p; p=g/h; return p;}; int main(int argc, char *argv[])
{ int vysledok; int g,h; int volba; int a,m,n; printf("Pre vypocet suctu dvoch cisel stlac 1 : \n"); printf("Pre vypocet rozdielu dvoch cisel stlac 2 : \n"); printf("Pre vypocet podielu dvoch cisel stlac 3: \n"); printf("Pre vypocet nasobku dvoch cisel stlac 4: \n"); printf("Pre vypocet suctu dvoch n-romernych matic stlac 5: \n"); scanf("%d",&volba); switch (volba) { case '1': printf("bola zadana volba 1\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=sucet(g,h); printf("sucet je %d\n",vysledok); break;
case '2': printf("bola zadana volba 2\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=rozdiel(g,h); printf("rozdiel je %d\n",vysledok); break;
case '3': printf("bola zadana volba 3\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=podiel(g,h); printf("podiel je je %d\n",vysledok); break;
case '4': printf("bola zadana volba 4\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=sucin(g,h); printf("sucin je %d\n",vysledok); break;
case '5': printf("bola zadana volba 5\n"); printf("Zadaj pocet stlpcov matice\n"); scanf("%d",&m); printf("Zadaj pocet riadkov matice\n"); scanf("%d",&n); int D[m][n],E[m][n],F[m][n]; nacitanieM(m,n,D); nacitanieM(m,n,E); printf("Matica A:\n"); vypisM(m,n,D); printf("\n\n Matica B:\n"); vypisM(m,n,E); sucetM(m,n,D,E,F); printf("\n\nSucet matic je :\n"); vypisM(m,n,F); getch(); return 0; } void nacitanieM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++)
A[i][j]=rand ()%100; } void vypisM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) {printf("\n"); for (j=0;j<y;j++)
printf("%d\t",A[i][j]); }}
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++) C[i][j]=A[i][j]+B[i][j]; } break; default: printf("\n Zla volba."); break; }} . Isto robim nejaku chybu ale fakt neviem kde, mal by som zacat ucit z nejakej literatury nie na z inyx programov.[/code]
|
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 | 3 |
Kód: #include <stdio.h> #include <stdlib.h>
int sucet(int g,int h) { int s; s=g+h; return s;}; int rozdiel(int g,int h) { int r; r=g-h; return r;}; int sucin(int g,int h) { int s; s=g*h; return s;}; float podiel(float g,float h) { float p; p=g/h; return p; }; int main(int argc, char *argv[])
{ int vysledok; int g,h; int volba; int a,m,n; printf("Pre vypocet suctu dvoch cisel stlac 1 : \n"); printf("Pre vypocet rozdielu dvoch cisel stlac 2 : \n"); printf("Pre vypocet podielu dvoch cisel stlac 3: \n"); printf("Pre vypocet nasobku dvoch cisel stlac 4: \n"); printf("Pre vypocet suctu dvoch n-romernych matic stlac 5: \n"); scanf("%d",&volba); switch (volba) { case '1': printf("bola zadana volba 1\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=sucet(g,h); printf("sucet je %d\n",vysledok); break;
case '2': printf("bola zadana volba 2\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=rozdiel(g,h); printf("rozdiel je %d\n",vysledok); break;
case '3': printf("bola zadana volba 3\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=podiel(g,h); printf("podiel je je %d\n",vysledok); break;
case '4': printf("bola zadana volba 4\n"); printf("zadaj a : \n"); scanf("%d",&g); printf("zadaj b : \n"); scanf("%d",&h); vysledok=sucin(g,h); printf("sucin je %d\n",vysledok); break;
case '5': printf("bola zadana volba 5\n"); default: printf("\n Zla volba."); break; } printf("Zadaj pocet stlpcov matice\n"); scanf("%d",&m); printf("Zadaj pocet riadkov matice\n"); scanf("%d",&n); int D[m][n],E[m][n],F[m][n]; nacitanie(m,n,D); nacitanieM(m,n,E); printf("Matica A:\n"); vypisM(m,n,D); printf("\n\n Matica B:\n"); vypisM(m,n,E); sucetM(m,n,D,E,F); printf("\n\nSucet matic je :\n"); vypisM(m,n,F); getch(); return 0; } void nacitanieM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++)
A[i][j]=rand ()%100; } void vypisM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) {printf("\n"); for (j=0;j<y;j++)
printf("%d\t",A[i][j]); }}
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++) C[i][j]=A[i][j]+B[i][j]; }
Tu by mal byt fixnuty ten koniec, su tam vsak este chyby - v deklaraciach premennych a definiciach funckii, ale je tazke zorientovat sa v takom kode. Napr. taketo nieco v C nie je
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]), daj tam skor
void sucetM (int x,int y,int **A,int **B,int **C)
Takychto chyb tam mas plno, takze Ti ich opravovat nebudem, skus si to popozerat. Pohladaj aj nejaku literaturu (napr. Pavel Herout - Ucebnica jazyka C) a uc sa z toho, potom lahko predides takymto chybam. ![;)](https://www.pcforum.sk/images/smilies/smile03.gif)
|
|
Registrovaný: 19.09.06 Prihlásený: 09.01.25 Príspevky: 749 Témy: 31 | 31 Bydlisko: Ružomberok&... |
gnk píše: mal by som zacat ucit z nejakej literatury nie na z inyx programov
to je pravda
A pre tvoje dobro ti odporucam skusit najprv opravit neutronmindov kod a najst si nejaky system (odsadenie a tak, ved to sa neda citat).
a kazdopadne ta deklaracie
void nacitanieM(int x,int y,int A[x][y]); mi gcc nezerie, lebo este nepozna v A[x][y], x a y
a takisto je zla deklaracia pola int M[a][b], lebo v case prekladu musis poznat hodnoty a a b, mozu tam byt hodnoty alebo konstanty. ty si chcel asi dynamicke pole. ale takto nejak by to malo byt funkcne:
Kód: #include <stdio.h> #include <stdlib.h>
int main() { int volba; int n; float a,m,b;
printf("Pre vypocet suctu dvoch cisel stlac 1 : \n"); printf("Pre vypocet rozdielu dvoch cisel stlac 2 : \n"); printf("Pre vypocet nasobku dvoch cisel stlac 3: \n"); printf("Pre vypocet podielu dvoch cisel stlac 4: \n"); printf("Pre vypocet suctu dvoch n-romernych matic stlac 5: \n"); scanf("%d",&volba); switch (volba)
{ case 1: printf("bola zadana volba 1\n"); scanf("%f%f",&a,&b); printf("%.2f + %.2f = %.2f\n",a,b,a+b); break;
case 2: printf("bola zadana volba 2\n"); scanf("%f%f",&a,&b); printf("%.2f - %.2f = %.2f\n",a,b,a-b); break;
case 3: printf("bola zadana volba 3\n"); scanf("%f%f",&a,&b); printf("%.2f * %.2f = %.2f\n",a,b,a*b); break;
case 4: printf("bola zadana volba 4\n"); scanf("%f%f",&a,&b); printf("%.2f / %.2f = %.2f\n",a,b,a/b); break;
case 5: printf("bola zadana volba 5\n"); getchar(); printf("Zadaj rozmer matice\n"); scanf("%d",&n); n--; float *m1,*m2; m1=(float *)malloc(sizeof(float)*n*n); m2=(float *)malloc(sizeof(float)*n*n);
int i,j; for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { scanf("%f",(m1+sizeof(int)*i+sizeof(int)*j)); } } for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { scanf("%f",(m2+sizeof(int)*i+sizeof(int)*j)); } } printf("Matica A:\n"); for(i=0;i<=n;i++) { putchar('\n'); for(j=0;j<=n;j++) { printf("%.2f ",*(m1+sizeof(int)*i+sizeof(int)*j)); //*(m1+sizeof(int)*i+sizeof(int)*j)); } } printf("\n\n Matica B:\n"); for(i=0;i<=n;i++) { putchar('\n'); for(j=0;j<=n;j++) { printf("%.2f ",*(m2+sizeof(int)*i+sizeof(int)*j)); //*(m1+sizeof(int)*i+sizeof(int)*j)); } } printf("\n\nSucet matic je :\n");
for(i=0;i<=n;i++) { putchar('\n'); for(j=0;j<=n;j++) { printf("%.2f ",*(m1+sizeof(int)*i+sizeof(int)*j)+*(m2+sizeof(int)*i+sizeof(int)*j)); //*(m1+sizeof(int)*i+sizeof(int)*j)); } } return 0; } }
|
|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
Dakujem za pomoc a snahu, stopa27 tvoja verzia je na mna este moc zlozita, ale najvacsi problem je ze mi nefunguje. Mozno to moze byt sposobene tym ze pouzivam Dev C++, vypise mi iba moznosti a potom "bola zadana volba x" .
Viacery ste pisali ze mam nieco zle v casti operacii s polom, ale ked som dal prec switch a sucet,rozdiel, tak mi program ide, cize chyba bude v tom switchy. Radsej by som spojazdil moju aj ked "skaredu" verziu ako tu lepsiu od stopy27 ktorej rozumiem na 50% Kód: #include <stdio.h> #include <stdlib.h>
void nacitanieM(int x,int y,int A[x][y]); void vypisM(int x,int y,int A[x][y]); void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]); int main() { int m,n; printf("Zadaj pocet stlpcov\n"); scanf("%d",&m); printf("Zadaj pocet riadkov\n"); scanf("%d",&n); int D[m][n],E[m][n],F[m][n]; nacitanieM(m,n,D); nacitanieM(m,n,E); printf("Matica A:\n"); vypisM(m,n,D); printf("\n\nMatica B:\n"); vypisM(m,n,E); sucetM(m,n,D,E,F); printf("\n\nSucet matic je :\n"); vypisM(m,n,F); system("PAUSE"); return 0; } void nacitanieM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++)
A[i][j]=rand ()%100; } void vypisM(int x,int y,int A[x][y]) {int i,j; for (i=0;i<x;i++) {printf("\n"); for (j=0;j<y;j++)
printf("%d\t",A[i][j]); }}
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]) { int i,j; for (i=0;i<x;i++) for (j=0;j<y;j++) C[i][j]=A[i][j]+B[i][j]; } getch();
[/code]
|
|
Registrovaný: 19.09.06 Prihlásený: 09.01.25 Príspevky: 749 Témy: 31 | 31 Bydlisko: Ružomberok&... |
int D[m][n],E[m][n],F[m][n]; : ale toto je sice syntakticky spravne, ale neni to spravne, cize tak ci tak to musis riesit cez dynamicke pole, ak nechces alokovat obrovsku maticu. A to moje ti to ma vypisat iba to "bola zadana volba x" a potom ocakava uz iba tvoj vstup. (dve cisla v pripade prvych 4 volieb a n*n*2 cisel v 5.pripade
|
|
Registrovaný: 23.11.08 Príspevky: 187 Témy: 34 | 34 Bydlisko: IP: 209.85.... |
vsak to funguje
Kód: #include <stdio.h> #include <stdlib.h>
void nacitanieM(int x,int y,int A[x][y]);
void vypisM(int x,int y,int A[x][y]);
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]); int main() { int m,n; printf("Zadaj pocet stlpcov\n"); scanf("%d",&m); printf("Zadaj pocet riadkov\n"); scanf("%d",&n); int D[m][n],E[m][n],F[m][n]; nacitanieM(m,n,D); nacitanieM(m,n,E); printf("Matica A:\n"); vypisM(m,n,D); printf("\n\nMatica B:\n"); vypisM(m,n,E); sucetM(m,n,D,E,F); printf("\n\nSucet matic je:\n"); vypisM(m,n,F); /*system("PAUSE");*/ getch(); return 0; } void nacitanieM(int x,int y,int A[x][y]) { int i,j; for (i=0;i<x;i++) { for (j=0;j<y;j++) A[i][j]=rand ()%100; } } void vypisM(int x,int y,int A[x][y]) { int i,j;
for (i=0;i<x;i++) { for (j=0;j<y;j++) printf("%d ",A[i][j]); printf("\n"); } }
void sucetM (int x,int y,int A[x][y],int B[x][y],int C[x][y]) { int i,j; for (i=0;i<x;i++) { for (j=0;j<y;j++) C[i][j]=A[i][j]+B[i][j]; } }
|
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 | 3 |
Nefunguje, ta pamat proste musi byt alokovana dynamicky, ako tu uz bolo spomenute.
gnk píše: Radsej by som spojazdil moju aj ked "skaredu" verziu ako tu lepsiu od stopy27 ktorej rozumiem na 50% ![:-)](https://www.pcforum.sk/images/smilies/smile04.gif)
Tak pracuj s dynamickymi poliami.
A stopova by mala fungovat korektne, skus si len pred poslednu zatvorku pridat system("pause"), alebo getch() z conio.h (ano, pred poslednu zatvorku, nie pred return 0, lebo to nie je uplne na konci, ale v bloku toho posledneho casu - mala chybicka sa vloudila). ![;)](https://www.pcforum.sk/images/smilies/smile03.gif)
|
|
Registrovaný: 07.11.06 Prihlásený: 16.12.08 Príspevky: 10 Témy: 3 | 3 |
jo ta stopova verrzia funguje pridal som tam ten getch a vypisy, ale netusim preco mi to niekedy pri tej matici vypise sucet iba prveho riadku... ![:roll:](https://www.pcforum.sk/images/smilies/smile05.gif)
|
|
Stránka: 1 z 1
| [ Príspevkov: 19 ] | |
|