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

question-closed Porównywanie wartości w dynamicznej tablicy struktur

Object Storage Arubacloud
0 głosów
442 wizyt
pytanie zadane 15 czerwca 2016 w C i C++ przez niezalogowany
zamknięte 15 czerwca 2016
#include <iostream>
#include <string>

using namespace std;

int a;

struct nws
{
	string nazwisko;
	double kwota;
};


int main()
{
	cout << "Liczba wplacajacych: ";
	(cin >> a).get();
	
	nws *lista = new nws[a];

	for (int i = 0; i < a; i++)
	{
		cout << "Nazwisko: ";
		getline(cin, lista[i].nazwisko);
		cout << "Kwota: ";
		(cin >> lista[i].kwota).get();
	}

	delete[] lista;

    return 0;
}

Moim zadaniem jest napisać program, który będzie prosił użytkownika o podanie nazwiska oraz kwoty jaką wpłacił donator. Następnie kwoty wraz z nazwiskami powyżej 10000 wypisze pod tytułem "Nasi Wspaniali Sponsorzy", a kwoty poniżej pod tytułem "Nasi Sponsorzy". Mam problem z napisaniem pętli, która posortuje mi te wartości double.

komentarz zamknięcia: Uzyskałem odpowiedź

1 odpowiedź

0 głosów
odpowiedź 15 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Jeżeli chodzi o samo sortowanie to c++ posiada funkcję std::sort()
http://en.cppreference.com/w/cpp/algorithm/sort
Jeżeli tego typu sortowanie cię nie interesuje to możesz stworzyć dwie tablice, a następnie wrzucać do jednej, albo drugiej danego donatora.. oczywiście w jednej będą mieli kwotę powyżej 10000, a w drugiej mniej.

komentarz 15 czerwca 2016 przez niezalogowany
Nie będzie problemu z połączeniem nazwiska z kwotą?
komentarz 15 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Na stronie, do której podałem link przeczytaj sobie o argumentach tej procedury.. Jedna z jej postaci to:
std::sort(frist,last,comp);
gdzie comp to  nazwa funkcji, która zwraca true jeżeli wartość w argumencie a, jest mniejsza niż w b.. mówiąc inaczej musisz napisać taką funkcję:
bool comp(const nws &a, const nws &b)
{
   return a.kwota<b.kwota
}

i następnie jej użyć w taki sposób:
std::sort(lista.begin,lista.begin+a-1,comp);
Powinno działać :D

komentarz 15 czerwca 2016 przez niezalogowany
Nie chodzi mi o tę funkcje, ale o tablice.
komentarz 15 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Nie za bardzo rozumiem.. Myślałem, że chodziło ci o to, że kwotę i nazwisko masz w jednej strukturze i zastosowanie tej funkcji może być problematyczne.. dlatego napisałem jak zastosować tą funkcję jeżeli masz do czynienia nie z tablicą wartości, a z tablicą obiektów.
komentarz 15 czerwca 2016 przez niezalogowany
Program ma wyświetlić oddzielnie kwote powyżej 10000 wraz z podanym wcześniej przez użytkownika nazwiskiem, a oddzielnie kwoty poniżej tej stawki wraz z odpowiadającymi im nazwiskami. W zadaniu chodzi o to, żeby wykorzystać głównie pętle bez funkcji.
komentarz 15 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Myślę, że to się nada:
> Bez dodatkowych funkcji.. same pętle
> Sortowanie tablicy według kwoty (od największej)
> Warunek wypisywania musisz zrobić już sam : )

#include <iostream>
#include <string>

using namespace std;

int a;

struct nws
{
    string nazwisko;
    double kwota;
};

int main()
{
    cout << "Liczba wplacajacych: ";
    (cin >> a).get();

    nws *lista = new nws[a];

    for (int i = 0; i < a; i++)
    {
        cout << "Nazwisko: ";
        getline(cin, lista[i].nazwisko);
        cout << "Kwota: ";
        (cin >> lista[i].kwota).get();
    }

    for(nws* i=lista; i<&lista[a]; i++)
        for(nws* j=i; j<&lista[a]; j++)
            if(j->kwota>i->kwota)
            {
                nws temp=*j;
                *j=*i;
                *i=temp;
            }

    for(int i=0; i<a; i++) cout<<lista[i].kwota<<" "<<lista[i].nazwisko<<"\n";
    delete[] lista;
    return 0;
}

 

Podobne pytania

+1 głos
2 odpowiedzi 932 wizyt
0 głosów
1 odpowiedź 1,039 wizyt
+1 głos
1 odpowiedź 652 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez niezalogowany

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...