• 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
459 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 946 wizyt
0 głosów
1 odpowiedź 1,050 wizyt
+1 głos
1 odpowiedź 661 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez niezalogowany

92,661 zapytań

141,557 odpowiedzi

319,999 komentarzy

62,028 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

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!

...