Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
Autor | Správa |
---|
Registrovaný: 09.03.07 Prihlásený: 28.07.09 Príspevky: 39 Témy: 7 | 7 Bydlisko: Trnava |
caf
tento program funguje, ale ak date za hodnoty pola velke cisla, tak to vypise "segmentation fault" inak to funguje dokonale. preco je to tak?
Kód: #include <stdio.h>
#include <stdlib.h>
int main()
{
int xa, ya, xb, yb, i, j, m;
int **pole_a, **pole_b, **pole_c;
do {
printf("Riadkov matice A: ");
scanf("%i", &xa);
printf("Stlpcov matice A: ");
scanf("%i", &ya);
printf("Riadkov matice B: ");
scanf("%i", &xb);
printf("Stlpcov matice B: ");
scanf("%i", &yb);
if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); }
}
while (ya != xb);
pole_a = (int**) malloc(xa * sizeof(int*)); //polia dynamicky
pole_b = (int**) malloc(xb * sizeof(int*));
for(i = 0; i < xa; ++i) {
pole_a[i] = (int*) malloc(ya * sizeof(int*));
}
for(i = 0; i < xb; ++i) {
pole_b[i] = (int*) malloc(yb * sizeof(int*));
}
for(i = 0; i < xa; ++i) { //nacitnie hodnot do matice pole_a
for(j = 0; j < ya; ++j) {
printf("A(%i,%i) = ", i+1, j+1);
scanf("%i", &pole_a[i][j]);
}
}
for(i = 0; i < ya; ++i) { //nacitnie hodnot do matice pole_b
for(j = 0; j < yb; ++j) {
printf("B(%i,%i) = ", i+1, j+1);
scanf("%i", &pole_b[i][j]);
}
}
pole_c = (int**) malloc(xa * sizeof(int*)); //vytvorenie matice pole_c
for (i = 0; i < xa; i++) {
pole_c[i] = (int*) malloc(yb * sizeof(int*));
}
for(i = 0; i < xa; ++i) { //vynulovanie matice pole_c
for(j = 0; j < yb; ++j) {
pole_c[i][j] = 0;
}
}
for(i = 0; i < xa; i++) {
for (j = 0; j < yb; j++) {
for (m = 0; m < yb; m++) {
pole_c[i][j] += pole_a[i][m] * pole_b[m][j];
}
}
}
printf("\nMatica AxB = \n");
for(i = 0; i < xa; i++) { //vypis matice pole_c
printf("\n ");
for(j = 0; j < yb; j++) {
printf("%3i ", pole_c[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
|
|
Registrovaný: 10.07.07 Prihlásený: 02.11.17 Príspevky: 1060 Témy: 0 | 0 Bydlisko: Bratislava |
Je pouzity datovy typ int , max. hodnota je od -32768 do 32768
_________________ Nebo je modre, voda je mokra... |
|
Registrovaný: 25.12.06 Prihlásený: 01.03.13 Príspevky: 239 Témy: 20 | 20 Bydlisko: Krásno n/Ky... |
Roberbo píše: Je pouzity datovy typ int , max. hodnota je od -32768 do 32768
to ma short alebo short int. Int ma od –2,147,483,648 do 2,147,483,647
kedze tam robis sucin matice uz napriklad 100,000 * 100,000 ti presiahne tento rozsah
|
|
Registrovaný: 09.03.07 Prihlásený: 28.07.09 Príspevky: 39 Témy: 7 | 7 Bydlisko: Trnava |
lenze ono to robi, aj ked je rozmer matic 3x1 a 1x3
ale ked je 2x2 a 2x3 tak to spravi spravne
tu je riesenie ;D
Kód: scanf("%i", &pole_a[i][j]);
}
}
printf("\nMatica A = \n\n");
for (i = 0; i < xa; ++i) { //vypis matice A printf(" ");
for (j = 0; j < ya; ++j) {
printf("%3i ", pole_a[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < ya; ++i) { //nacitanie hodnot do matice pole_b
for (j = 0; j < yb; ++j) {
printf("B(%i,%i) = ", i+1, j+1);
scanf("%i", &pole_b[i][j]);
}
} printf("\nMatica B = \n\n");
for (i = 0; i < xb; ++i) { //vypis matice B printf(" ");
for (j = 0; j < yb; ++j) {
printf("%3i ", pole_b[i][j]);
}
printf("\n");
}
pole_c = (int**) malloc(xa * sizeof(int*)); //vytvorenie a vynulovanie matice pole_c
for (i = 0; i < xa; i++) {
pole_c[i] = (int*) malloc(yb * sizeof(int)); for (j = 0; j < yb; ++j) { pole_c[i][j] = 0; }
}
for (i = 0; i < xa; i++) { //vynasobenie
for (j = 0; j < yb; j++) { if (ya == 1) {
for (m = 0; m < 1; ++m) { // 1 ak matice su rozmeru (k*1)x(1*k)
pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
}
printf("pole_c[%i][%i] = %i\n", i, j, pole_c[i][j]); } else { for (m = 0; m < yb; ++m) {
pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]);
} }
}
}
printf("\nMatica AxB = \n");
for(i = 0; i < xa; i++) { //vypis matice pole_c
printf("\n ");
for(j = 0; j < yb; j++) {
printf("%3i ", pole_c[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
|
|
Registrovaný: 10.07.07 Prihlásený: 02.11.17 Príspevky: 1060 Témy: 0 | 0 Bydlisko: Bratislava |
nie je int ako int ...podla typu prekladaca moze mat bud dva alebo styri bajty a hodnota na konci +(-)1 tiez podla typu prekladaca
_________________ Nebo je modre, voda je mokra... |
|
Registrovaný: 09.03.07 Prihlásený: 28.07.09 Príspevky: 39 Témy: 7 | 7 Bydlisko: Trnava |
ja sa z toho zblaznim, ono ten program FUNGUJE ale uz ked dam rozmer 3x3 a 3x3 tak to spadne.... ale to je blbost, ze mam malo pamate alebo co.. proste co to moze byt ? tu mate kod, prosim vas pozrite sa na to.... fakt, ked dam vacsie rozmery, tak to padne...
Kód: /* Stefan Miklosovic AI6 zadanie 3 - nasobenie matic */
#include <stdio.h> #include <stdlib.h>
int main() { int xa, ya, xb, yb, i, j, m; int **pole_a, **pole_b, **pole_c;
do { printf("Riadkov matice A: "); scanf("%i", &xa); printf("Stlpcov matice A: "); scanf("%i", &ya); printf("Riadkov matice B: "); scanf("%i", &xb); printf("Stlpcov matice B: "); scanf("%i", &yb); if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); } } while (ya != xb);
pole_a = (int**) malloc(xa * sizeof(int*)); //polia dynamicky pole_b = (int**) malloc(xb * sizeof(int*));
for (i = 0; i < xa; ++i) { pole_a[i] = (int*) malloc(ya * sizeof(int)); }
for (i = 0; i < xb; ++i) { pole_b[i] = (int*) malloc(yb * sizeof(int)); }
for (i = 0; i < xa; ++i) { //nacitanie hodnot do matice pole_a for(j = 0; j < ya; ++j) { printf("A(%i,%i) = ", i+1, j+1); scanf("%i", &pole_a[i][j]); } }
printf("\nMatica A\n\n");
for (i = 0; i < xa; ++i) { //vypis matice A printf(" "); for (j = 0; j < ya; ++j) { printf("%3i ", pole_a[i][j]); } printf("\n\n"); }
printf("\n");
for (i = 0; i < ya; ++i) { //nacitanie hodnot do matice pole_b for (j = 0; j < yb; ++j) { printf("B(%i,%i) = ", i+1, j+1); scanf("%i", &pole_b[i][j]); } } printf("\nMatica B\n\n");
for (i = 0; i < xb; ++i) { //vypis matice B printf(" "); for (j = 0; j < yb; ++j) { printf("%3i ", pole_b[i][j]); } printf("\n\n"); }
pole_c = (int**) malloc(xa * sizeof(int*)); //vytvorenie a vynulovanie matice pole_c for (i = 0; i < xa; i++) { pole_c[i] = (int*) malloc(yb * sizeof(int)); for (j = 0; j < yb; ++j) { pole_c[i][j] = 0; } }
for (i = 0; i < xa; i++) { //vynasobenie for (j = 0; j < yb; j++) { if (ya == 1) { for (m = 0; m < 1; ++m) { //yb-1 => ak sa rozmer rovna (k*1)x(1*k) pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]); } } else { for (m = 0; m <= xa; ++m) { pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]); } } } }
printf("\nMatica AxB\n");
for(i = 0; i < xa; i++) { //vypis matice pole_c printf("\n "); for(j = 0; j < yb; j++) { printf("%3i ", pole_c[i][j]); } printf("\n"); } printf("\n"); return 0; }
|
|
Registrovaný: 16.05.07 Prihlásený: 01.08.17 Príspevky: 837 Témy: 6 | 6 |
m@-nX píše: to ma short alebo short int. Int ma od –2,147,483,648 do 2,147,483,647
kedze tam robis sucin matice uz napriklad 100,000 * 100,000 ti presiahne tento rozsah to ma JAVA hentaky int
_________________ getch();?{readkey;?} na konci? !A naco! Riesenie je (Alt+F5)
99% pochopí a shaggy je druhá kategória |
|
Registrovaný: 09.03.07 Prihlásený: 28.07.09 Príspevky: 39 Témy: 7 | 7 Bydlisko: Trnava |
nejde to aj tak, uz mi z toho sibe... furt to pada, ale len ked dam napr. 3x3 a 3x3, tak mi to padne, ale 2x2 a 2x2 to bere. a to je blbost, ze nasobim velke cisla.... neviem v com to moze byt.... toto je posledna verzia
Kód: /* Stefan Miklosovic AI6 zadanie 3 - nasobenie matic */
#include <stdio.h> #include <stdlib.h>
int main() { int xa, ya, xb, yb, i, j, m; int **pole_a, **pole_b, **pole_c;
do { printf("Riadkov matice A: "); scanf("%i", &xa); printf("Stlpcov matice A: "); scanf("%i", &ya); printf("Riadkov matice B: "); scanf("%i", &xb); printf("Stlpcov matice B: "); scanf("%i", &yb); if (ya != xb) { printf("Zadane zle rozmery matic na sucin!\n\n"); } } while (ya != xb);
pole_a = (int**) malloc(xa * sizeof(int*)); //polia dynamicky pole_b = (int**) malloc(xb * sizeof(int*));
for (i = 0; i < xa; ++i) { pole_a[i] = (int*) malloc(ya * sizeof(int)); }
for (i = 0; i < xb; ++i) { pole_b[i] = (int*) malloc(yb * sizeof(int)); }
for (i = 0; i < xa; ++i) { //nacitanie hodnot do matice pole_a for(j = 0; j < ya; ++j) { printf("A(%i,%i) = ", i+1, j+1); scanf("%i", &pole_a[i][j]); } }
printf("\nMatica A\n\n");
for (i = 0; i < xa; ++i) { //vypis matice A printf(" "); for (j = 0; j < ya; ++j) { printf("%3i ", pole_a[i][j]); } printf("\n\n"); }
printf("\n");
for (i = 0; i < ya; ++i) { //nacitanie hodnot do matice pole_b for (j = 0; j < yb; ++j) { printf("B(%i,%i) = ", i+1, j+1); scanf("%i", &pole_b[i][j]); } } printf("\nMatica B\n\n");
for (i = 0; i < xb; ++i) { //vypis matice B printf(" "); for (j = 0; j < yb; ++j) { printf("%3i ", pole_b[i][j]); } printf("\n\n"); }
pole_c = (int**) malloc(xa * sizeof(int*)); //vytvorenie a vynulovanie matice pole_c for (i = 0; i < xa; i++) { pole_c[i] = (int*) malloc(yb * sizeof(int)); for (j = 0; j < yb; ++j) { pole_c[i][j] = 0; } }
for (i = 0; i < xa; i++) { //vynasobenie for (j = 0; j < yb; j++) { if (ya == 1) { for (m = 0; m < 1; ++m) { //yb-1 => ak sa rozmer rovna (k*1)x(1*k) pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]); } } else { for (m = 0; m <= xa; ++m) { pole_c[i][j] += (pole_a[i][m] * pole_b[m][j]); } } } }
printf("\nMatica AxB\n");
for(i = 0; i < xa; i++) { //vypis matice pole_c printf("\n "); for(j = 0; j < yb; j++) { printf("%3i ", pole_c[i][j]); } printf("\n"); } printf("\n"); return 0; }
|
|
Registrovaný: 28.04.07 Prihlásený: 03.11.09 Príspevky: 133 Témy: 1 | 1 |
cca 91. riadok:
Kód: for (m = 0; m <= xa; ++m) { nahraď Kód: for (m = 0; m < xa; ++m) {
|
|
Registrovaný: 09.03.07 Prihlásený: 28.07.09 Príspevky: 39 Témy: 7 | 7 Bydlisko: Trnava | |
Registrovaný: 25.12.06 Prihlásený: 01.03.13 Príspevky: 239 Témy: 20 | 20 Bydlisko: Krásno n/Ky... |
juho píše: to ma JAVA hentaky int
aj c++ prelozene prekladacom pre 32 bitove procesory..ma 2 na 31 hodnot
|
|
Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 9 | 283 | 27.11.2012 19:08 Najiva | | v Assembler, C, C++, Pascal, Java | 1 | 381 | 27.12.2010 19:39 Forty- | | v Assembler, C, C++, Pascal, Java | 11 | 991 | 09.05.2011 22:20 M4rek | | v Assembler, C, C++, Pascal, Java | 0 | 367 | 30.01.2012 19:13 KocuR | | v Assembler, C, C++, Pascal, Java | 1 | 318 | 05.11.2011 12:01 Fico | | v Operačné systémy Microsoft | 0 | 556 | 27.08.2008 20:57 misso |
|