Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. 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
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users