Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
Mám zadaný úkol a potřeboval bych k němu napsat signaturu.
Moc teda nevím co to signatura vůbec je.
Zápis studentů na předměty
Napište program pro vedení a sledování zápisu studentů na předměty. Program
nejprve přečte textový soubor se studenty (pro každého studenta je uvedeno
rodné číslo a jméno a příjmení) a textový soubor s vypsanými předměty (pro
každý předmět je uvedena zkratka, název předmětu a počet kreditů). Program
pak umožňuje vytvářet a sledovat tabulku zápisů studentů na předměty.
Operace:
- vložit zápis studenta na předmět (dvojice rodné číslo studenta a zkratka
předmětu)
- zrušit zápis studenta na předmět
- pro daného studenta vypsat předměty, které má zapsané
- pro daný předmět vypsat seznam studentů, kteří mají předmět zapsán
- vypsat seznam všech studentů a jejich zapsané předměty
- vypsat seznam všech předmětů spolu se studenty, kteří je mají zapsané
- uložit stav zápisu do souboru
- přečíst stav zápisu ze souboru
- atd.
Tabulku studentů budu realizovat pomocí:
1. seřazeného pole
Mohl by mi někdo pomoct nebo poradit?
Díky moc.
Offline
Mozna, ze uz ted pisu pozde. Take jsem nevedel, co je signatura :-) Nasel jsem to napriklad tady. Je tam psano: "Signatura – název metody + typy parametrů", nevim, jestli je to to, co mate napsat, a jestli mate napsat signaturu(y) i cely program, nebo jenom signaturu(y), tak jestli to porad potrebujes, tak se kdyztak ozvi (ale nevim, jestli budu vedet :-) ).
Offline
Zdravím,
Lumikodlak má pravdu.
Signatura je název metody + typy parametrů + klíčová slova. Je to vše, co zvládne zkontrolovat překladač (zde je rozdíl signatura vs. kontrakt).
Pokud je tedy v zadání:
vložit zápis studenta na předmět (dvojice rodné číslo studenta a zkratka předmětu)
Já bych asi napsal signaturu takové metody třeba nějak takto:
private void zapisStudenta(String rodneCislo, String zkratkaPredmetu)
Offline
Zdravím,
já bych udělal signatury (prototypy) metod asi tímto způsobem:
class Student { . . . public: bool StudentPridat(int RC, char *Predmet); // nebo char Predmet[], ekvivalentní zápis bool StudentZrusit(int RC, char *Predmet); int StudentMaZapsano(int RC); int PredmetMaStudenty(char *Predmet); int StudentVypis(); int PredmetVypis(); //etc.. }
Ty boolky proto, aby se zjistilo, zda se přidání nebo odebrání podařilo, či nikoli (selhat přidání může pokud pole struktur, která drží studenty a co mají zapsané je plné (hodit výjimku, nebo alespoň otestovat návratovou hodnotu), stejně tak těžko můžeš zrušit zápis u studenta, který neexistuje, a nebo daný předmět zapsaný nemá (opět, vyhodit výjimku)
Ty inty by mohly vracet počet příslušných záznamů, které se vypíšou...
Implemenotvat ty metody doufám necheš :D
Offline
Jasny.
Díky moc.
A když tam mam napsat ještě Reprezentaci k tomu, tak rozumím tomu dobře když si myslím že reprezentace je vlastně popis toho program, co bude provádět nebo vytvářet? Nebo je to nějaký popis těch metod popř. tříd? (např. class Student, Predmet)
Offline
No, céčkaři (ten part co jsem ti dal nahoře je céčkovej (C++, samozřejmě, když se bavíme o třídách)) používáme zavedených termínů deklarace prototypu (funkce/metody) (tomu říkáš signatura), definice funkce (tedy to co ta funkce/metoda skutečně dělá), a její volání (použití) v nějakém prováděcím kódu... Reprezentace metody může být cokoli, já zkoušel googlit, ale moc jsem toho nevygúglil. Určitě ve škole, která ti zadala tento úkol, nebo v literatuře, jsi-li samouk by mělo být definováno, co který pojem znamená - tak se zkus pozeptat vyučujícího, případně se podívat na první strany literatury, a zjisti, co je tedy vlastně zadáním, pak Ti s tím určitě budeme schopní pomoci
Jednu tu implementaci ti napíšu, ostatní z toho odvodíš
Offline
Využívám spíš literaturu a google.
Taky jsem googlil ohledně té Implementace a signatury, jelikož jsem zpočátku moc nevěděl co je to signatura a reprezentace, a moc jsem toho nenašel.
Vyzkouším nějakou literaturu a nějak to spáchám.
Jinak, díky za tu jednu implementaci, zbytek odvodím od toho.
Offline
typedef struct StudentiUdaje { int RodneCislo; char Predmet[5]; // ctyri pismena na kod predmetu staci bool IsUsed; } udaje, *pudaje; class Student { private: udaje studenti[500]; // pole struktur, kapacita 500 studentu int GetFree(); public: bool StudentPridat(int RC, char *Predmet); }; int Student::GetFree() // zjistime volne misto v poli struktur, je-li nejake, a tam budeme psat. Pisu to do //nesetrideneho pole, tridici algoritmus si jiste navrhnes, nebo pouzijes nejaky z knihovny { int i; for(i = 0; i < 500; i++) { if(!studenti[i].IsUsed) break; } return i; } bool Student::StudentPridat(int RC, char *Predmet) { int free = GetFree(); if(free == 500) return false; // pokud neni volne misto, funkce vrati false, a tento stav si osetris studenti[free].RodneCislo = RC; studenti[free].Predmet = Predmet; studenti[free].IsUsed = true; //nezapomenn nastavit priznak, ze toto misto je uz obsazene, jinak priste //funkce GetFree vrati zase tenhle stejny index, a data si prepises return true; } int main() {.......}
Snad jsem tam neudělal nějakou syntaktickou chybu, pokud ano, samozřejmě mně upozorněte, opravím
Offline
Třída Student:
Student( _ ) : unsigned int -> Student
FromData( _ ): Student, char *-> bool
AddSubject( _ ): Student, unsigned int -> void
RemoveSubject( _ ): Student, unsigned int -> void
GetID(): Student -> unsigned int
GetBirthCertificateNumber(): Student -> int
GetFirstName(): Student -> string
GetSecondName():Student -> string
GetName():Student -> string
GetSubjects():Student -> vector<unsigned int>
Třída Subject:
Subject( _ ) : unsigned int -> Subject
FromData( _ ): Subject, char *-> bool
AddStudent _ ): Subject, unsigned int -> void
RemoveStudent( _ ): Subject, unsigned int -> void
GetID(): Subject -> unsigned int
GetAbbreviation(): Subject -> string
GetName(): Subject -> string
GetCredits(): Subject -> unsigned int
GetStudents():Subject -> vector<unsigned int>
Třída Registrations:
Registrations : -> Registrations
FromFiles( _ , _ ): Registrations, string, string -> bool
FromFile( _ ): Registrations, string -> bool
ToFile( _ ): Registrations, string -> bool
AddStudent( _ ): Registrations, string -> bool
AddSubject( _ ): Registrations, string -> bool
RemoveStudents( _ ): Registrations, vector<unsigned int> -> void
RemoveSubjects( _ ): Registrations, vector<unsigned int> -> void
RegisterStudentsToSubjects( _ , _ ): Registrations, vector<unsigned int>,
vector<unsigned int> -> void
DeregisterStudentsFromSubjects( _ , _ ): Registrations, vector<unsigned int>,
vector<unsigned int> -> void
GetStudent( _ ): Registrations, unsigned int -> Student
FindStudent( _ , _ , _ ): Registrations, const char *, string, string -> vector<unsigned
int>
FindStudent( _ ): Registrations, string -> vector<unsigned int>
GetSubject( _ ): Registrations, unsigned int -> Subject
FindSubject( _ , _ , _ ): Registrations, const char *, string, string -> vector<unsigned
int>
FindSubject( _ ): Registrations, string -> vector<unsigned int>
ShowStudents(): Registrations, string, vector<unsigned int> -> void
ShowStudentsInDetail(): Registrations, string, vector<unsigned int> -> void
ShowSubjects(): Registrations, string, vector<unsigned int> -> void
ShowSubjectsInDetail(): Registrations, string, vector<unsigned int> -> void
Clear(): Registrations-> void
Muže bát i takhle?
Offline