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

Sortowanie i zliczanie-dlaczego to tak dziwnie wygląda?

Cloud VPS
0 głosów
269 wizyt
pytanie zadane 8 czerwca 2018 w C i C++ przez WhiteDragon Początkujący (290 p.)
otagowane ponownie 8 czerwca 2018 przez WhiteDragon

-Mam wpisać do tablicy 8 liczb od 0 do 10.
-Mam je zliczyć i tą tablice zliczeń wypisać.
-Zliczać ma od maksymalnej liczby do 0
-Potem według tego ma wpisać te wyniki do tablicy i będą już posortowane w niej bo wyniki spiszą się po kolei.
Jestem w tym punkcie zliczania,zlicza mi dziwnie i już nie mam pomysłu o co może chodzić. Bardzo dziwnie wykonuje sięmój program... Nie mam też pomysłu jak to potem przepisać. Dopiero zaczynam przygodę z programowaniem-proszę o wyrozumiałość i cierpliwość.
Poproszę o wytłumaczenie i ewentualne skorygowanie kodu.

#include "stdafx.h"
#include <iostream>
#include <cstdlib>

using namespace std;
void powtorki(int tab[]) 
{
	//LICZY MAXA*****************
	int max;
	max = tab[0];
	for (int i = 0; i<8; i++)
	{

		if (max<tab[i])
		{
			max = tab[i];
		}
	}
	cout << "Nasza wartosc maskymalna wynosi:" << " " << max << endl;
	//ZLICZA**********************
	int i;
	int p = 1;
	for (i = 0; i <=max; i++)
	{
		if (tab[i] == max)
		{
			p++;
		}
		else {
			cout << tab[i] << " wystepuje " << p << " razy" << endl;
			p = 1;
			max = max - 1;
		}
	}
}

int main()
{
	int rozmiar = 8;
	int tab[8];
	for (int i = 0; i<8; i++)
	{
		cout << "Wpisz" << " " << i + 1 << " " << "liczbe" << endl;
		cin >> tab[i];
	}
	for (int i = 0; i<rozmiar; i++)
	{
		cout << "[" << tab[i] << "]" << " ";
	}
	
	powtorki(tab);
	
	for(int i=0;i<8;i++)
	{
		cout << "[" << tab[i] << "]" << " ";
	}
	system("pause");


	

return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2018 przez Kurogami12 Bywalec (2,610 p.)

Chyba nie rozumiem co próbujesz powiedzieć. Ale może zacznijmy od początku. 

W funkcji powtorki masz zmienną typu max, później masz pętle, która wyszukuje Ci największą 
liczbę w tablicy, później masz kolejną pętle, która jest źle skonstruowana swoją drogą (jakby na 
to nie patrzeć) i która sprawdza, czy dany element tablicy jest równy największemu elementowi. W 
tym momencie tablica jest nieposortowana (to jest ważne). Jeśli akurat zerowy element tablicy 
jest największym elementem tablicy to zwiększa wartość zmiennej p, która już przed rozpoczęciem 
pętli miała wartość 1, czyli zwiększ na 2. Jeśli jednak element tablicy nie jest największym 
elementem to zmniejszasz wartość max (teraz już wartość max nie jest taka sama jak wartość 
największego elementu tablicy) i zmieniasz p na 1 no i wyświetlasz tekst. 

Po pierwsze.. p powinno być równane na początku do 0. Po drugie, druga pętla powinna wyglądać tak for(int i=0; i<8; i++) ewentualnie żeby było bardziej uniwersalnie można wykorzystać sizeof. Po 3 nie powinieneś tak łatwo zmieniać wartości max. po 4 w ogóle tego w żaden sposób nie sortujesz, jeśli to miałoby tak działać, to druga pętla powinna mieć w sobie jeszcze jedną pętle, a w ogóle przed tym powinno to już być posortowane malejąco. po 5 nie wiem czy powinieneś korzystać do tego z funkcji. jakoś szczególnie nie poprawia to przejrzystości kodu. Jeśli jednak chcesz użyć już funkcji, to zrób to dopiero jak będzie Ci wszystko poprawnie działać. Ale ogólnie poczytaj może o sortowaniu jako takim.

komentarz 9 czerwca 2018 przez WhiteDragon Początkujący (290 p.)
O sortowaniu jako takim to czytałem,zasadę znam ale nie wiem jak przenieść to do programu.

Tak jak jest napisane w pytaniu-jestem na bardzo niskim lvlu i wiele rzeczy jeszcze nie wiem,nie rozumiem. Wiele algorytmów jest w internecie ale nie rozumiem ich. Zmieniłem p na 0,dodałem drugą pętlę w tej pętli a wszystko dałem normalnie do maina zamiast w funkcji. Co dalej? Jak poprawić tą pętlę by dobrze działała i jaką drugą pętle do sortowania dać?

Podobne pytania

0 głosów
3 odpowiedzi 958 wizyt
pytanie zadane 23 marca 2021 w C i C++ przez warzywko13 Użytkownik (840 p.)
0 głosów
1 odpowiedź 253 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhiteDragon Początkujący (290 p.)
0 głosów
2 odpowiedzi 2,511 wizyt
pytanie zadane 1 kwietnia 2017 w C i C++ przez Deloryn Bywalec (2,060 p.)

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

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

Kursy INF.02 i INF.03
...