Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím, potřeboval bych poradit. Potřebuju vyhledat z 3 největší číslo, ale bohužel mi to furt vyhazuje nějaké nesmysli. Tu je můj zdroják, tak zda mi někdo pomůže? :)Díky moc všem.
#include <stdio.h>
int main()
{
int pole[]={5,8,3,11,22,4,5,55,7,88,7,44,11,33,66,77,4,44,11,22,5,55};
int max1,max2,max3,i;
int pocet_cis = sizeof (pole)/sizeof (int);
printf("Cisla v poli: \n");
for (i = 0; i < pocet_cis; i++)
{
printf("%d ", pole[i]);
}
{
if(i>=max1)max1 = i;
if(max1>=max2)max2 = max1;
if(max2>=max3)max3 = max2;
}
printf("\n\nTreti nejvetsi cislo je. %d", max1);
return 0;
}
Offline
↑ mysak9:
Zdravím,
asi jsem už z C trochu vypadl, ale nějak tam nevidím ani náznak toho, že bys něco hledal;-) Napadají mě dvě možnosti, jak bys mohl postupovat:
1. Pole prohledat, najít maximum, to si zapamatovat a z pole odstranit. To zopakuješ 3x a budeš mít tři největší prvky.
2. Vezmeš nějaký algoritmus pro seřazení pole, pole seřadíš a vezmeš tři největší prvky. Algoritmus se můžeš pokusit optimalizovat tak, že bude výsledkem jen to, že první tři prvky budou tři největší; tj. např. pole 3x projedeš BubbleSortem (tedy jedním průběhem).
Offline

↑ mysak9:
Zdar,
nesmysly ti to vyhazuje z několika důvodů.
Proměnné max1,max2,max3 nemáš před jejich použitím inicializované, může v nich být cokoli a ty je porovnáváš.
Tvoje ify jsou mimo forcyklus, porovnání se vykoná pouze jednou.
Porovnáváš a přiřazuješ index i, ne hodnotu proměnné na i-té pozici v poli.
Osobně si myslím, že jsi zvolil nejlepší postup. Pole stačí projet pouze jednou a pamatovat si tři nejvyšší hodnoty.
Offline