Dobrý večer
Dělám seminárku na hodinu programování. Tohle je zadání:
Matice (dvourozměrné pole) s maximálním rozměrem 50x50 prvku typu int (signed
nebo unsigned - dle úvahy řešitele). Umožněte načtení dat z klávesnice a
ze souboru. Konkrétní rozměr matice zadá uživatel jako dvě první hodnoty
z klávesnice. Při načtení dat ze souboru jsou rozměry matice uloženy jako první
dvě hodnoty v souboru. Soubor je textový. Výstup programu umožněte do souboru
nebo na obrazovku. Ovládání programu umožněte pomocí jednoduchého menu.
Program musí obsahovat alespoň jednu uživatelskou funkci a musí být ošetřen
proti chybným vstupům. Program vyhledá čtvrtý nejvetší prvek v horní
trojúhelníkové matici a vrátí jeho hodnotu jako výstup programu. Dále vrátí
jeho polohu v matici (např. hodnota 25, prvek 3,4 ).
Zde je program:
#include <stdio.h>
#include <stdlib.h>
int menu; /*promenna, pro ulozeni volby z menu*/
int i,j,l,rad,slo,pom; /*indexove promenne, pocet radku, pocet sloupcu, pomocna*/
int k=0; /*index do noveho pole, ve kterem budu radit*/
int pole[50][50]; /*misto pro ulozeni vstupni matice*/
int razeni[2500]; /*jednorozmerne pole pro serazeni prvku dle velikosti*/
int radky[2500]; /*souradnice radku*/
int sloupce[2500]; /*souradnice sloupce*/
int main(void) /*hlavni blok programu*/
{ /*vstupni menu*/
printf ("******************* MENU **********************\n");
printf ("* Vyber z nasledujicich moznosti *\n");
printf ("* 1. Nacti rozmer matice a matici ze souboru *\n");
printf ("* 2. Nacti rozmer matice a matici z klavesnice*\n");
printf ("* 3. Konec *\n");
printf ("***********************************************\n");
printf ("Zadej svoji volbu: \n");
scanf("%u",&menu); /*nacte volbu*/
switch (menu) /*pokracuje podle volby*/
{
case 1:{ /*nacteni matice ze souboru*/
FILE *fi;
fi=fopen("vstup.txt","r");
/*pokud soubor neexistuje, vypise hlasku a ceka na stisk klavesy, pak se program ukonci*/
if (fi==NULL) { printf("Soubor nenalezen\n");
getch();
exit(0);};
fscanf (fi,"%u",&rad); /*prvni hodnota je pocet radku*/
fscanf (fi,"%u",&slo); /*druha hodnota je pocet sloupcu*/
/*naplneni pole vsemi hodnotami obsazenymi v matice*/
for (i = 0; i < rad; i++) {
for (j = 0; j < slo; j++) {
fscanf(fi,"%u",&pole[i][j]);
}
}
fclose (fi); /*uzavreni souboru*/
break;
}
case 2:{ /*nacteni matice z klavesnice*/
printf("Zadej rozmer matice>\n");
/*osetreni vstupu, rozmer matice musi byt min 2x3, jinak by nebylo mozne,
najit 4. nejvetsi prvek v horni trojuhelnike matici*/
do{printf("Pocet radku (min 2,max 50): ");
scanf("%u",&rad);}
while (rad<2||rad>50);
do{printf("Pocet sloupcu (min 3,max 50): ");
scanf("%u",&slo);}
while (slo<3||slo>50);
/*zadavani hodnot z klavesnice*/
for (i = 0; i < rad; i++) {
for (j = 0; j < slo; j++) {
printf("zadej prvek na pozici> %u. radek a %u. sloupec>" ,i+1,j+1);
scanf("%u",&pole[i][j]);
}
}
break;
}
case 3:{ /*volba pro ukonceni programu*/
exit(0);
break;
}
default: { /*v pripade zadani jine hodnoty, to uzivateli oznami*/
printf("Spatne zadano\n");
getch();
exit(0);
break;
}
}
/*tento blok programu vypise zadanou matici*/
printf("\nNactena matice>");
for (i = 0; i < rad; i++) {
printf("\n");
for (j = 0; j < slo; j++) {
printf("%u",pole[i][j]);
printf("\t");
}
}
/*prvky se poskladaji za sebe do jednorozmerneho pole, kde je pozdeji
bude mozno seradit; zaroven se naplni spodni trojuhelnikova matice
nejmensi moznou hodnotou, v mem pripade nulou; dale jsou plneny dalsi
dva vektory, do prvniho se uklada aktualni radek a do druheho sktualni
sloupec, tedy souradnice prvku, je to potreba, abych po serazeni vedel
kde se dany prvek nachazel*/
for (i = 0; i < rad; i++) {
for (j = 0; j < slo; j++) {
if (i>j) razeni[k]=0; /*je-li index radku vetsi nez index sloupcu,
je prvek pod diagonalou, tedy ve spodni
trojuhelnikove matici*/
else razeni[k]=pole[i][j];
radky[k]=i;
sloupce[k]=j;
k++;
}
}
/*serazeni sestupne Bubblesortem*/
for (i = (k-1); i >= 0; i--){
for (j = 0; j <= i; j++){
if (razeni[j]<razeni[j+1]){ /*porovnani sousednich prvku*/
/*prohozeni dvou hodnot, v pripade ze prvni je mensi*/
pom=razeni[j];
razeni[j]=razeni[j+1];
razeni[j+1]=pom;
/*soucasne prohodime hodnoty udavajici souradnici radku*/
pom=radky[j];
radky[j]=radky[j+1];
radky[j+1]=pom;
/*a hodnoty udavajici souradnici sloupcu*/
pom=sloupce[j];
sloupce[j]=sloupce[j+1];
sloupce[j+1]=pom;
}
}
}
/*vyber typu vystupu uzivatelem*/
printf("\n\nKam chces napsat vysledek?");
printf("\n1. do souboru");
printf("\n2. na obrazovku");
printf("\n3. do souboru i na obrazovku\n");
printf("\nZadej svoji volbu: \n");
scanf("%u",&menu);
printf("\n");
switch (menu)
{
case 1:{ /*vystup do souboru*/
FILE *fo;
fo=fopen("vystup.txt","wb"); /*otevre, v pripade, ze neexistuje, vytvori soubor vystup.txt*/
fprintf(fo,"4.nejvetsi prvek v horni trojuhelnikovy matici je %u a nachazi se na %u.radku a v %u.sloupci",razeni[3],radky[3]+1,sloupce[3]+1);
/*trojka a +1, kvuli indexovani pole od nuly, tedy na treti pozici je 4. nejvetsi prvek a bez plus jednicky program vypisuje nultou souradnici*/
printf("Vysledek byl zapsan do souboru vystup.txt, ktery byl vytvoren tam, kde se nachazi tento program. Program bude ukoncen po stisku klavesy.");
fclose(fo);
break;
}
case 2:{ /*vystup na obrazovku*/
printf("4.nejvetsi prvek v horni trojuhelnikovy matici je %u a nachazi se na %u.radku a v %u.sloupci\n",razeni[3],radky[3]+1,sloupce[3]+1);
printf("Program bude ukoncen po stisku klavesy.");
break;
}
case 3:{ /*kombinace obou predchozich*/
FILE *fo;
fo=fopen("vystup.txt","wb");
fprintf(fo,"4.nejvetsi prvek v horni trojuhelnikovy matici je %u a nachazi se na %u.radku a v %u.sloupci",razeni[3],radky[3]+1,sloupce[3]+1);
fclose(fo);
printf("4.nejvetsi prvek v horni trojuhelnikovy matici je %u a nachazi se na %u.radku a v %u.sloupci\n",razeni[3],radky[3]+1,sloupce[3]+1);
printf("Program bude ukoncen po stisku klavesy.");
break;
}
default:{ /*po spatnem zadani, je to oznameno a program ukoncen*/
printf("\nSpatne zadano!!! Program bude ukoncen po stisku klavesy.\n");
break;
}
}
getch(); /*cekani na stisk klavesy*/
}
V programu Dev-C++ mi to jde zkompilovat, ale už to nejde spustit, protože to hlásí, že soubor není zkompilován. Kompilace proběhne v pořádku a napíše to OK.
Takže soubor se zkompiluje, ale nejde spustit. Nevěděl by někdo jak to spustit? CMD jsem zkoušel a tam to zase hází error, že gcc nebylo rozpoznáno.
Díky moc