• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Struktury C++ - najlepsza i najgorsza ocena, wyświetlenie danych

Object Storage Arubacloud
0 głosów
353 wizyt
pytanie zadane 2 czerwca 2020 w C i C++ przez vishi7 Początkujący (430 p.)
#include <iostream>
#include <string.h>
#include <cstdlib>
using namespace std;
// deklaracja struktury
struct Informacja_o_studencie{
    string imie;
    string nazwisko;    
    int rok_studiow;
    double ocena_AL;
};

int main()
{
    Informacja_o_studencie studenci[5]; // tablica ze struktury

    for (int i = 0; i < 5; i++)
    {
        // pobieramy dane
        cout << "Podaj imie studenta numer " << i + 1<<": ";
        cin >> studenci[i].imie;
        cout << "Podaj nazwisko studenta numer " << i + 1<<": ";
        cin >> studenci[i].nazwisko;
        cout << "Podaj rok studiow studenta numer " << i + 1<< ": ";
        cin >> studenci[i].rok_studiow;
        cout << "Podaj ocene z Algebry liniowej studenta numer " << i + 1 << ": ";
        cin >> studenci[i].ocena_AL; 
        cout << "\n";
    }    
      for (int i = 0; i < 5; i++)
    {
        // wyświetlamy tablicę
        cout << "------Student numer "<< i + 1<<"-------"<< endl;
        cout <<"Imie: "<< studenci[i].imie << endl;
        cout <<"Nazwisko: "<< studenci[i].nazwisko << endl;
        cout <<"rok studiow: "<< studenci[i].rok_studiow << endl;
        cout <<"ocena z Algebry liniowej: "<< studenci[i].ocena_AL << endl;
        cout << "\n";
    }
    for (int i = 1; i < 5; i++) {//przeszukanie pozostałych 4 liczb
        if (studenci[0].ocena_AL > studenci[i].ocena_AL)
            studenci[0].ocena_AL = studenci[i].ocena_AL;
    }
  
    system("pause");
    return 0;
}

Jak mogę wyświetlić dane studenta z najlepszą i najgorszą oceną? Z góry dziękuję :)

komentarz 2 czerwca 2020 przez tkz Nałogowiec (42,000 p.)

1 odpowiedź

0 głosów
odpowiedź 2 czerwca 2020 przez amtrax Dyskutant (9,630 p.)
wybrane 4 czerwca 2020 przez vishi7
 
Najlepsza

Można "wpakować" struktury do obiektu np. vector z biblioteki STL. Nastepnie przeciążyć p operator<(), aby zwracał wartości logiczne np. tak:
 

 bool operator<(Informacja_o_studencie & x,Informacja_o_studencie & b)
{
    if(x.ocena_AL < b.ocena_AL)
        return true;
    else
        return false;

}

za pomocą funkcji sort, posortować oceny. Potem można wyświetlić największą i najmniejszą wartość ;) 


 

1
komentarz 2 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
edycja 2 czerwca 2020 przez tkz

 Po co pakować do vectora? Sort przyjmuje iteratory, nie konkretny typ danych. 

#include <algorithm>
#include <iostream>
struct student
{
    std::string imie;
    unsigned index;
};

int main()
{
    const student students[] = { { "ala", 123 }, { "asd", 534 }, { "fg", 645 }, { "f", 4 } };
    const auto[min, max]
        = std::minmax_element(std::begin(students), std::end(students), [](student a, student b)
            {
                return a.index < b.index;
            });
    std::cout << "min = " << min->imie << ", max = " << max->imie << '\n';
}

 

komentarz 2 czerwca 2020 przez vishi7 Początkujący (430 p.)
Ale w moim programie oceny są podawane w trakcie działania programu
komentarz 2 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
I co stanowi problem? Wywołasz to po podaniu wszystkich ocen.
komentarz 2 czerwca 2020 przez vishi7 Początkujący (430 p.)
#include <iostream>
#include <string.h>
#include <algorithm>
#include <cstdlib>
using namespace std;
// deklaracja struktury
struct Informacja_o_studencie {
    string imie;
    string nazwisko;
    int rok_studiow;
    double ocena_AL;
    unsigned index;
};

int main()
{
    Informacja_o_studencie studenci[5]; // tablica ze struktury

    for (int i = 0; i < 5; i++)
    {
        // pobieramy dane
        cout << "Podaj imie studenta numer " << i + 1 << ": ";
        cin >> studenci[i].imie;
        cout << "Podaj nazwisko studenta numer " << i + 1 << ": ";
        cin >> studenci[i].nazwisko;
        cout << "Podaj rok studiow studenta numer " << i + 1 << ": ";
        cin >> studenci[i].rok_studiow;
        cout << "Podaj ocene z Algebry liniowej studenta numer " << i + 1 << ": ";
        cin >> studenci[i].ocena_AL;
        cout << "\n";
    }
    for (int i = 0; i < 5; i++)
    {
        // wyświetlamy tablicę
        cout << "------Student numer " << i + 1 << "-------" << endl;
        cout << "Imie: " << studenci[i].imie << endl;
        cout << "Nazwisko: " << studenci[i].nazwisko << endl;
        cout << "rok studiow: " << studenci[i].rok_studiow << endl;
        cout << "ocena z Algebry liniowej: " << studenci[i].ocena_AL << endl;
        cout << "\n";
    }
    /*for (int i = 1; i < 5; i++) {//przeszukanie pozostałych 4 liczb
        if (studenci[0].ocena_AL > studenci[i].ocena_AL)
            studenci[0].ocena_AL = studenci[i].ocena_AL;
    }*/
    const Informacja_o_studencie studenci[0];
    const auto [min, max]
        = minmax_element(begin(studenci), end(studenci), [](Informacja_o_studencie a, Informacja_o_studencie b)
            {
                return a.index < b.index;
            });
        cout << "min = " << min ->imie << ", max = " << max->imie << '\n';

    system("pause");
    return 0;
}

Przekładajac to na mój program nie działa, nie podkresla  nawet min 

komentarz 2 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
https://onlinegdb.com/rkepJxE3U

C++ 17, sortujesz po indeksie, ale go nigdzie nie wczytujesz. No i 46 linia, po co?

Podobne pytania

0 głosów
2 odpowiedzi 263 wizyt
0 głosów
1 odpowiedź 264 wizyt
0 głosów
1 odpowiedź 1,531 wizyt

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...