Informatică, întrebare adresată de sheldinminecraft, 8 ani în urmă

Vă rog ajutați-mă să creez un program în C++,după condițiile din mai în jos

Anexe:

boiustef: cum sa te ajutam?
tr sa declari o structura cu 6 campuri, sa citesti n si cele 4 date pt fiecare student si le stochezi intr-un vector elementele caruia sunt structuri, paralel afli notamedieexamene si dupa ea bursa. Dupa ce completezi vectorul faci o sortare in descrestere dupa campul bursa a vectorului dupa ce trimiti in fisierul de iesire datele din vectorul sortat

Răspunsuri la întrebare

Răspuns de andriesboss92
1

#include <iostream>

#include <fstream>

using namespace std;

ifstream in("bursa.in");

ofstream out("bursa.out");

usigned int n; // n este numar natural

// Declarare structura student cu variabilele aferente

struct student{

   int nr_matricol, ex1, ex2, ex3;

   float nme; // media notelor

   int b; // bursa

} a[100];

void rezolvare()

{

   // citim numarul de studenti

   in>>n;

   

   // in timpul citirii rezolvam si cerinta.

   // pentru fiecare rand din fisierul bursa.in executam

   for(int i=1;i<=n;i++)

   {

       /* citire date student*/

       in>>a[i].nr_matricol;

       in>>a[i].ex1;

       in>>a[i].ex2;

       in>>a[i].ex3;

       

       /*

       Pentru fiecare student in parte vom calcula media si bursa aferenta, in functie de formula data in cerinta

       */

       a[i].nme=(a[i].ex1+a[i].ex2+a[i].ex3)/3; // calculam media notelor. Media aritmetica inseamna suma numerelor date impartite la cate sunt

       

       /*

       Vom folosi formula din cerinta pentru a determina bursa fiecarui student.

       Daca media calculata mai sus este mai mica decat 6, atunci bursa va fi 0;

       Altfel

       Daca media este intre 6 si 7 atunci bursa va fi 150 pentru studentii care au media intre notele 6 si 7;

       Altfel

       Daca media este mai mare decat 7 atunci bursa va fi egala cu 40 * media obtinuta

       */

       

       if(a[i].nme<6)

           a[i].b=0;

       else

           if(a[i].nme>=6 && a[i].nme <7)

               a[i].b=150;

           else

               if(a[i].nme>=7)

                   a[i].b=40*a[i].nme;

   }

   

   /*

   Ordonam descrescator toata structura in functie de media fiecarui student ( de la cel mai mare la cel mai mic )

   Dar ca sa facem aceasta ordonare corect trebuie ca si celelalte date ale studentilor sa fie ordonate pentru a afisa datele fiecarui student corect.

   */

   

   for(int i=1;i<n;i++)

       for(int j=i+1;j<=n;j++)

       {

           if(a[i].nme<a[j].nme)

           {

               int aux=a[i].nr_matricol;

               a[i].nr_matricol=a[j].nr_matricol;

               a[j].nr_matricol=aux;

               

               int aux1=a[i].ex1;

               a[i].ex1=a[j].ex1;

               a[j].ex1=aux1;

               

               int aux2=a[i].ex2;

               a[i].ex2=a[j].ex2;

               a[j].ex2=aux2;

               

               int aux3=a[i].ex3;

               a[i].ex3=a[j].ex3;

               a[j].ex3=aux3;

               

               int aux4=a[i].nme;

               a[i].nme=a[j].nme;

               a[j].nme=aux4;

               

               int aux5=a[i].b;

               a[i].b=a[j].b;

               a[j].b=aux5;

           }

       }

   

   // afisare

   for(int i=1;i<=n;i++)

       out<<"[ "<<a[i].nr_matricol<<" ] [ "<<a[i].ex1<<" "<<a[i].ex2<<" "<<a[i].ex3<<" ] [ "<<a[i].nme<<" ] [ "<<a[i].b<<" ]"<<endl;

}

int main()

{

   rezolvare(); // apelul subprogramului.

}


andriesboss92: P.S. in afisare nu erau necesare acele paranteze patrate. Le-am pus pentru a putea delimita cu usurinta care sunt nr_matricole, ex1,ex2,ex3, media si bursa
sheldinminecraft: Mulțumesc mult
boiustef: o intrebare pentru andries... Imi pare ca la sortare prea te-ai complicat.. nu era posibil sa faci astfel:
if(a[i].nme??????????????? sau cu o variabila ajutatoare de tip student pentru a interschimba integral ca structuri pe a[i] si a[j] , dar nu la fiecare camp?
boiustef: if(a[i].nme < a[j].nme) swap(a[i], a[j]); asta am avut in vedere... aici in comentarii daca semnul mai mic e lipit de ceva, trunchiaza...
andriesboss92: In primul rand... vezi ca la declararea lui n am gresit sintaxa... era unsigned int n :) O sa iti dea eroare
andriesboss92: In al doilea rand, ba da boiustef, se poate si cu swap. Dar ia explica-i tu cuiva care abia stie sa foloseasca structurile ce face functia swap. E exact ce am scris eu in cod. Am vrut sa ii explic babeste, ca sa zic asa, pentru a putea intelege mai usor. Ce rost are sa ii fac rezolvarea din cateva linii de cod si omu sa nu inteleaga nimic?
andriesboss92: Mai bine sa vada ca le sortez pe toate, decat sa incerce sa deduca asta si eventual sa nu poata
andriesboss92: In momentul in care dai un raspuns, iti apare undeva mesajul acesta: "Începe cu informațiile de bază
Explică tot ceea ce faci. Imaginează-ți că cel ce a postat întrebarea nu știe de unde să înceapă și nu are noțiunile de bază." si "Folosește pași
Încearcă să îți stucturezi răspunsurile folosind mai mulți pași pentru a ajunge la răspunsul final. Scopul nostru este să îi facem pe alții să înțeleagă și ca pe viitor să reușească să rezolve singuri."
boiustef: ... :))) ok, mersi pt explicatie...
Alte întrebări interesante