Ročníková práce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Ročníková práce – C / C++ – Fórum – Programujte.comRočníková práce – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Sopta0
Návštěvník
7. 6. 2008   #1
-
0
-

Zdravím lidi,
Dostali jsme za úkol ročníkovou práci v jazyku C. Bohužel než sem postřehl že to píší v C++, měl jsem půlku programu hotovou. Ale co, snad mě to paní učitelka odpustí. Ale k věci.
Program zlouží jakási klasifikace studentů. Vložení jmen studentů, jaké má student předměty a známky. A spoustu dalších funkcí. Bohužel jsem se sekl u jedné věci. A to, že se mě ještě nepodařilo vypočítat průměr žáka. Pro jistotu zde uvádím celý zdrojový kód. Děkuji všem kdo odpoví.

#include <iostream>

#include <stdlib.h>

using namespace std;

// Definice funkcí
int nabidka();
int prumerStudenta(int pocetZnamek, int soucetZnamek);

// Globálni proměnné
int moznost;

int main()
{
const int pocetStudentu = 2;
int pocetPredmetu, zobrazitUdaje = 0, pocetZnamek, soucet = 0, hledanaZnamka, hledanyPredmet, chybnaZnamka;
char student[pocetStudentu][30];
char predmet[pocetPredmetu][4];
int znamky[pocetStudentu][pocetPredmetu];

// Proměnná chybnaZnamka: Pokud uživatel zadá známku mimo interval 1-5, bude hodnota N-tého prvku přemazána

for(;;) {
int volba = nabidka(); // Funkci nabídka uložíme do proměnné volba
switch(volba) {
case 1:
// Vybrána první možnost "Zadat udaje pro klasifikaci"

// Aby mohl uživatel použít po načtení všech dat funkci "Vypsat údaje", musí proměnná nabývat hodnotu 1
zobrazitUdaje = 1;


cout << "\na - Zadejte prijmeni 2 studentu.\n";
cout << "-----------------------------------------\n";

// Načtení studentů
for( int i=0; i < pocetStudentu; i++ ) {
cout << "Zadejte prijmeni " << i+1 << ". studenta: ";
cin >> student[i];
}

cout << "\nb - Zadejte POCET PREDMETU. Predmet napiste zktratkou Pr.: MAT, CJL...\n";
cout << "-----------------------------------------\n";

cout << "Pocet predmetu: ";
cin >> pocetPredmetu;

cout << "\n";
// Načtení předmětů
for( int i = 0; i < pocetPredmetu; i++) {
cout << "Nazev " << i+1 << " predmetu: ";
cin >> predmet[i];
}

cout << "\n";
// Načtení známek
for( int i = 0; i < pocetStudentu; i++) {
cout << "\n[" << student[i] << "]\n";
for( int j = 0; j < pocetPredmetu; j++) {
cout << predmet[j] << ": ";
cin >> znamky[i][j];
if(znamky[i][j] > 5 ) {
cout << "\aSpatne zadana znamka\n";
znamky[i][j] = chybnaZnamka;
}
soucet += znamky[i][j];
pocetZnamek++;
}
}

cout << "\n\n";

break;
case 2:
// Vybrána druhá možnost "Vypsat udaje"

if(zobrazitUdaje==0) { // Nebyli vyplněny příjmení studentů, známky a předměty
cout << "\n\aNeni co vypsat. Musite nejdrive zadat udaje!!\n\n";
} else { // Byli načteni studenti, předměty, známky
cout << "\n2 - Vypis studentu a znamek: \n";
cout << "-----------------------------------------\n";
for (int i = 0; i < pocetStudentu; i++) {
cout << "\n" << i+1 << "| " << student[i] << "\n";
for (int j = 0; j < pocetPredmetu; j++) {
cout << predmet[j] << " : ";
cout << znamky[i][j] << "";
if(znamky[i][j] == 0) { // Pokud se nějaká známka rovná nule, oznámi to
cout << " - Pravdepodobne spatne zadana znamka. Z intervalu 1-5";
}
cout << "\n";
}
}
}

break;
case 3:
// Vybrána třetí možnost "Výpočet průměru známek u každého studenta"

if(zobrazitUdaje==0) {
cout << "\n\aNelze vypocitat prumer. Musite nejdrive zadat udaje!!\n\n";
} else {
cout << "\n3 - Vypocet prumeru znamek u kazdeho studenta: \n";
cout << "-----------------------------------------\n";

for( int i = 0; i < pocetStudentu; i++) {
cout << "\n" << student[i] << " ma prumer: ";
for (int j = 0; j < pocetPredmetu; j++) {
cout << prumerStudenta(pocetZnamek, soucet);
}
}
}
cout << "\n";
break;
case 4:
// Vybrána čtvrtá možnost "Výpis studentu podle hledané známky"

if(zobrazitUdaje==0) {
cout << "\n\aNelze hledat. Musite nejdrive zadat udaje!!\n\n";
} else {
cout << "\n4 - Vypis studentu podle hledane znamky: \n";
cout << "-----------------------------------------\n";
cout << "Zadejte znamku podle ktere chcete hledat: ";
cin >> hledanaZnamka; // Vstup hledané známky

for(int i = 0; i < pocetStudentu; i++) {
cout << "\n" << student[i] << ":\n";
for (int j = 0; j < pocetPredmetu; j++) {
if(znamky[i][j]==hledanaZnamka) {
cout << "Predmet " << predmet[j] << "=" << hledanaZnamka << "\n";
}
}
}

}
cout << "\n";
break;
case 5:
// Vybrána pátá možnost "Výpis všech známek z určitého předmětu"

if(zobrazitUdaje==0) {
cout << "\n\aNelze hledat. Musite nejdrive zadat udaje!!\n\n";
} else {
cout << "\n5 - Vypis vsech znamek z urciteho predmetu: \n";
cout << "-----------------------------------------\n";

for (int i = 0; i < pocetPredmetu; i++) {
cout << "Predmet " << predmet[i] << ": ";
for (int j = 0; j < pocetStudentu; j++) {
cout << "" << znamky[j][i] << ",";
}
cout << "\n";
}


}
cout << "\n";
break;

case 0:
// Ukončení programu
return 0;
break;

default:
// Pokud byla zvolena jiná volba než která je dostupná, vypíše to
cout << "\aVolba neexistuje!! Zkuste to znovu.\n";
break;
}
}


system("PAUSE");
return 0;
}

// Funkce

int nabidka() {

// Nabídka programu KLASIFIKACE
cout << "\t\t\t********** NABIDKA **********\n\n";
cout << "\t\t\t 1) Zadat udaje pro klasifikaci\n";
cout << "\t\t\t 2) Vypsat udaje\n";
cout << "\t\t\t 3) Vypocet prumeru znamek u kazdeho studenta\n";
cout << "\t\t\t 4) Vypis studentu podle hledane znamky\n";
cout << "\t\t\t 5) Vypis vsech znamek z urciteho predmetu\n";
cout << "\t\t\t 0 Ukoncit program\n";
cout << "\t\t\t Vase volba: ";
cin >> moznost;

return moznost;
}

int prumerStudenta(int pocetZnamek, int soucetZnamek) {
int prumer;
prumer = soucetZnamek / pocetZnamek; // Spočítá průměr průměru

return prumer;
}


Editoval midin: Příště dávej linky do tagu code.

Nahlásit jako SPAM
IP: 90.176.56.–
Sotolář Zdeněk
Reklama
Reklama
Matrix17
~ Anonymní uživatel
286 příspěvků
8. 6. 2008   #2
-
0
-

To Sopta : Moc sem si to neprohlížel ale máš chybu už v deklaraci proměných jelikož tohle:



const int pocetStudentu = 2;
int pocetPredmetu, zobrazitUdaje = 0, pocetZnamek, soucet = 0, hledanaZnamka, hledanyPredmet, chybnaZnamka;
char student[pocetStudentu][30];
char predmet[pocetPredmetu][4];
int znamky[pocetStudentu][pocetPredmetu];

Je tak trochu problém tedy konkrétně text označený tučně. Jelikož nikde není stanoveno jak velké to pole vlastně je a tudíž tam může být jakákoli hodnota. Další spíš rada je že proměná možnost která je globální by měla být lokální a navíc ani není důvod aby byla globální. A pak máš trochu bordel v načítání prvků do pole a jejich zobrazováním. Konkrétně to nebudu vypisovat. Ale jako příklad:


for( int i = 0; i < pocetPredmetu; i++) {
cout << "Nazev " << i+1 << " predmetu: ";
cin >> predmet[i];
}

Jestli ti to jde spustit a "jenom" ti to nepočítá průměr tak tomu bych se teda divil. Jelikož když sem to zkoušel já tak to vždycky spadlo. A vůbec se tomu nedivím. Čili by to chtělo hodně dodělat.

Nahlásit jako SPAM
IP: 85.207.17.–
Sopta0
Návštěvník
8. 6. 2008   #3
-
0
-

To Matrix17 : Všechno funguje. Průměr sem už dořešil z kamošem.

Nahlásit jako SPAM
IP: 90.176.56.–
Sotolář Zdeněk
Sopta0
Návštěvník
8. 6. 2008   #4
-
0
-

To Sopta : BTW ještě jsem to trochu předělávál takže tohle už není aktuální verze

Nahlásit jako SPAM
IP: 90.176.56.–
Sotolář Zdeněk
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 81 hostů

Podobná vlákna

Ročníková práce — založil Vincek

Ročníková práce — založil David

Rocnikova praca — založil Santas

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý