Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Problema structuri
Last Updated: Jul 07 2019 09:47, Started by
Raz03
, Jul 06 2019 18:06
·
0
#1
Posted 06 July 2019 - 18:06
Salut.
Sunt începător la capitolul structuri și am o rezolvare la o problemă care nu funcționează. Nu neg că e posibil să fi sărit anumite părți din teorie și să fie absurde unele lucruri, dar aș vrea să mă ajutați, vă rog. Problema sună cam așa: La un concurs au participat n elevi, pentru fiecare elev cunoscându-se numele, liceul de proveniență (șir de caractere) și media obținută (de la 1 la 10). Să se realizeze un program care citește datele elevilor și afișează pe ecran numele elevilor cu cea mai mare notă și media notelor participanților. Iar rezolvarea mea e următoarea: #include <iostream> #include <string.h> using namespace std; struct elev{ char nume[51]; char liceu[101]; float media; }; struct maxim{ char nume[51]; char liceu[51]; float media; }; //am luat o structură copie, în care vreau să rețin elevii cu media maximă int main() { elev e[100]; maxim m[100]; int n,i,j=1,s=0,max=0,x; float ma; cout<<"Numarul elevilor: ";cin>>n; cin.get(); for (i=1;i<=n;i++) { cin.get(); cout<<"Nume elev: "; cin.getline(e[i].nume,51); cout<<"Liceul de provenienta: "; cin.getline(e[i].liceu,101); cout<<"Media: "; cin>>e[i].media; s+=e[i].media; if (e[i].media>max) { m[i].nume==e[j].nume; m[i].liceu==e[j].liceu; m[i].media==e[j].media; } else if (e[i].media==max) { j++; m[i].nume==e[j].nume; m[i].liceu==e[j].liceu; m[i].media==e[j].media; } } cout<<"Elevi cu cea mai mare nota:"<<endl; for (i=1;i<=j;i++) { cout<<"Nume elev: "<<m[i].nume<<endl; cout<<"Liceul de provenienta: "<<m[i].liceu<<endl; cout<<"Media: "<<m[i].media<<endl; } cout<<endl<<"Media aritmetica a notelor: "<<(float)s/n; return 0; } Nu am vrut să fie rezolvarea optimă deoarece vreau întâi să găsesc o cale care să funcționeze, iar abia apoi să încep să o optimizez. Aștept păreri. |
#2
Posted 06 July 2019 - 18:20
Quote struct maxim{ char nume[51]; char liceu[51]; float media; }; //am luat o structură copie, în care vreau să rețin elevii cu media maximă std::vector<elev> maxime; Edited by Iulius-Foyas, 06 July 2019 - 18:22. |
#4
Posted 06 July 2019 - 18:24
#5
Posted 06 July 2019 - 19:08
Parcugi elevii => aflii cea mai mare medie.
Parcurgi inca o data elevii => afisezi pe cei cu media maxima. E structura cu aceleasi campuri dar alt nume nu te ajuta, poti declara oricate variabile de tipul primei structuri. La fel poti retine pointeri spre structuri, dar aia nu cred ca i-ai invatat inca. |
#6
Posted 06 July 2019 - 19:12
dani.user, on 06 iulie 2019 - 19:01, said:
Parcugi elevii => aflii cea mai mare medie. Parcurgi inca o data elevii => afisezi pe cei cu media maxima. Mulțumesc de idee, cred că e cea mai bună. Nu am reușit să o testez pentru că am o problemă la citire, în zona asta probabil: Raz03, on 06 iulie 2019 - 18:06, said: cout<<"Numarul elevilor: ";cin>>n; cin.get(); for (i=1;i<=n;i++) { cin.get(); cout<<"Nume elev: "; cin.getline(e[i].nume,51); cout<<"Liceul de provenienta: "; cin.getline(e[i].liceu,101); cout<<"Media: "; cin>>e[i].media; Am încercat să mut cin.get() și în alte locuri, dar nu se schimbă nimic. Edited by Raz03, 06 July 2019 - 19:12. |
#7
Posted 06 July 2019 - 19:24
for (int i = 0; i < n; i++) { cout<<"Nume elev: "; cin.getline(e[i].nume, sizeof(e[i].nume)); cout<<"Liceul de provenienta: "; cin.getline(e[i].liceu, sizeof(e[i].liceu)); cout<<"Media: "; cin>>e[i].media; cin.ignore(); ... }Indecsii incep de la 0. Amestecarea getline cu >> e mai delicata. Daca ai zis deja ca nume are dimensiune max 51, folosesti sizeof sa-i zici compilatorului unde sa se uite, ca daca schimbi candva sa nu schimbi in 10 locuri. Edited by dani.user, 06 July 2019 - 19:25. |
#8
Posted 06 July 2019 - 21:53
Mulțumesc tuturor!
Aceasta este soluția funcțională, în caz că va mai interesa pe cineva în viitor: #include <iostream> #include <string.h> using namespace std; struct elev{ char nume[51]; char liceu[101]; float media; }; struct maxim{ char nume[51]; char liceu[51]; float media; }; int main() { elev e[100]; maxim m[100]; int n,i,j=1,s=0,maxim=0,x; float ma; cout<<"Numarul elevilor: ";cin>>n; cin.get(); for (int i = 0; i < n; i++) { cout<<"Nume elev: "; cin.getline(e[i].nume,sizeof(e[i].nume)); cout<<"Liceul de provenienta: "; cin.getline(e[i].liceu,sizeof(e[i].liceu)); cout<<"Media: "; cin>>e[i].media; cin.ignore(); s+=e[i].media; if (e[i].media>maxim) maxim=e[i].media; } cout<<"Elevi cu cea mai mare nota:"<<endl; for (i=0;i<n;i++) { if (e[i].media==maxim) { cout<<"Nume elev: "<<e[i].nume<<endl; cout<<"Liceul de provenienta: "<<e[i].liceu<<endl; cout<<"Media: "<<e[i].media<<endl; } } cout<<endl<<"Media aritmetica a notelor: "<<(float)s/n; return 0; } |
#9
Posted 06 July 2019 - 22:30
Cerintele programului nu necesita retinerea tuturor datelor. Nu ai nevoie decit de un for pentru citire si restul calculezi pe masura ce vin date...
Ai nevoie de o varibila max pentru a tine media cea mai mare, un vector in care sa tii elevii cu nota cea mai mare si inca o variabila sum in care sa aduni notele ca sa faci la sfirsit media impartind la numarul de participanti. - Initializezi max cu prima medie citita si adaugi elevul in vectorul de elevi fenomenal de destepti, adaugi media la sum - pentru fiecare elev citit ulterior aduni media la sum verifici daca - media e mai mare decit max, atunci stergi vectorul si pui elevu nou in el - media e egala cu max, adaugi elevu nou La sfirsit tiparesti elevii din vectori si sum / numarul de participanti. |
#10
Posted 06 July 2019 - 23:53
|
#11
Posted 07 July 2019 - 06:39
struct elev{ char nume[51]; char liceu[101]; float media; }; struct maxim{ char nume[51]; char liceu[51]; float media; };nu are rost sa creezi o structura identica*, creezi structura, apoi o atribui unei variabile, sau mai multor variabile. Sa spui ca prima daca liceul are 100 de caractere intr-un loc si doar 50 in altul, n-are noima. Edited by MarianG, 07 July 2019 - 06:44. |
#12
Posted 07 July 2019 - 08:17
MarianG, on 07 iulie 2019 - 06:39, said: struct elev{ char nume[51]; char liceu[101]; float media; }; struct maxim{ char nume[51]; char liceu[51]; float media; };nu are rost sa creezi o structura identica*, creezi structura, apoi o atribui unei variabile, sau mai multor variabile. Sa spui ca prima daca liceul are 100 de caractere intr-un loc si doar 50 in altul, n-are noima. Scuze, am uitat să o șterg când am actualizat codul. Iulius-Foyas, on 06 iulie 2019 - 23:53, said:
Anexat ti-am scris programul in C++ (si nu C combinat cu C++) daca te mai intereseaza :
Spoiler
Util. Mersi! |
#13
Posted 07 July 2019 - 09:47
La un concurs au participat n elevi, pentru fiecare elev cunoscându-se numele, liceul de proveniență (șir de caractere) și media obținută (de la 1 la 10).
struct elev { char nume[CONST]; char liceu[CONST]; int medie; }; struct concurs { struct elev elevi[CONST]; int ceaMaiMareMedie; int medieGenerala; } Să se realizeze un program care citește datele elevilor și afișează pe ecran numele elevilor cu cea mai mare notă și media notelor participanților. int main() { inscriereElevi(concurs); afisareEleviCuCeaMaiMareMedie(concurs); afisareMedieGenerala(concurs); return 0; } Edited by MarianG, 08 July 2019 - 19:35. |
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users