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

c++ sortowanie zła kolejność

0 głosów
243 wizyt
pytanie zadane 25 stycznia 2018 w C i C++ przez Yoshow Nowicjusz (240 p.)
otagowane ponownie 25 stycznia 2018 przez Yoshow

Siemka! Mam problem z programem w c++, otóż zadanie polegało na tym, aby program wszystko posortował od największego pola do najmniejszego i ładnie to wyświetlił w takiej kolejności: długość x szerokość = pole

Problem mój polega na tym, że program sortuje samo pole, i wygląda to komicznie bo wychodzi np.

7x5=5

5x1=35

3x2=81


#include <iostream>
using namespace std;
struct prostokat
{
	float dlugosc;
	float szerokosc;
	float pole;
};
void wpisuje(prostokat tab[], int ile_elem)
{
	for (int i=0;i<ile_elem;i++)
	{
		cout<<"Wpisz "<<i+1<<" dlugosc: ";
		cin>>tab[i].dlugosc;
		cout<<"Wpisz "<<i+1<<" szerokosc: ";
		cin>>tab[i].szerokosc;
	}
}
void pole(prostokat tab[], int ile_elem)
{
	for (int i=0;i<ile_elem;i++)
	{
	
	tab[i].pole=tab[i].dlugosc*tab[i].szerokosc;
}
}
void sort(prostokat tab[], int ile_elem)
{
	int swap;
	for(int i = 0; i<ile_elem-1; i++){
		for(int j=0; j<ile_elem-1; j++){
			if(tab[j].pole > tab[j+1].pole){
				swap = tab[j].pole;
				tab[j].pole = tab[j+1].pole;
				tab[j+1].pole = swap;
			}
		}
	}
}
void sprawdz(prostokat tab[], int ile_elem)
{
	int x=0;
	for (int i=0;i<ile_elem;i++)
	{
		if (tab[i].pole!=tab[i+1].pole)
		{
			x--;
	
		}
		else 
		{
			x++;
		
		}
	}
	if (x>0)
	{
		cout<<"Sa przynajmniej 2 identyczne pola"<<endl;
	}
	else if (x<0)
	{
		cout<<"Nie ma takich samych pol"<<endl;
	}
}
void wypisz(prostokat tab[], int ile_elem)
{
	for (int i=0;i<ile_elem;i++)
	{
			cout<<"Pole "<<i+1<<" prostokata: "<<tab[i].dlugosc<<" x "<<tab[i].szerokosc<<" = "<<tab[i].pole<<endl;
	}

}
int main()
{
	int ile_elem=3;
	prostokat tab[10];
	wpisuje(tab, ile_elem);
	pole(tab, ile_elem);
	sprawdz(tab, ile_elem);
	wypisz(tab, ile_elem);
	cout<<endl;
	sort(tab, ile_elem);
	wypisz(tab, ile_elem);
	
	return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 25 stycznia 2018 przez mokrowski Mędrzec (158,960 p.)
Jeśli Twoim celem jest zamiana 2 struktur to dlaczego w zakresie 33-35 zmieniasz sam atrybut pole a nie tab[j] praz tab[j + 1] ? Zmiennej także nie nazywał bym swap a raczej tmp. std::swap to nazwa dla metody zamiany i może wprowadzać w błąd osobę czytającą.

Zmienne ile_elem, powinny być typu size_t a nie int. Masz także błąd w implementacji sortowania (sprawdź czy masz dobre zakresy indeksów. Szczególnie j).

Podobne pytania

0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 27 sierpnia 2022 w C i C++ przez Jerzy Użytkownik (950 p.)
0 głosów
1 odpowiedź 1,307 wizyt
pytanie zadane 24 kwietnia 2022 w C i C++ przez Mavimix Dyskutant (8,490 p.)
+1 głos
1 odpowiedź 993 wizyt
pytanie zadane 12 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

93,720 zapytań

142,641 odpowiedzi

323,264 komentarzy

63,268 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...