Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
NOOB
Neregistrovaný
Avatar
NOOB:11.11.2013 21:21

Zdravím programátoři!
Mám vytvořené pole do kterého zapisuji a ukládám čísla a při vložení nuly , se všechny hodnoty vypíší + max, min, průměr.

Jenže bych potřeboval ještě vypsat všechny hodnoty, které jsou obsaženy více než dvakrát a kolikrát jsou obsaženy. Aby výstup vypadal nějak takto.
Př.:
5 : 4x
6 : 7x
4 : 6x
atd...

Přikládám zde co zatím mám.

#include <stdio.h>
#include <stdlib.h>

int i,sum=0;
float H,array[50],min=20­00,max=0;

int main()
{

printf("Databaze vysek.\n\nPro souhrn stiskni 0\n\n");

while(1){
printf ("Zadej vysku:"); scanf ("%f", &H);
if(H==0)
break;

array[sum]=H;
sum++;
}

printf("\n\n");

if(sum!=0)
printf("Nactena data:\n");

for (i=0 ; i<sum ; i++){
printf ("\n%f",array[i]);
}

for (i=0; i<sum; i++){
if(array[i]>max) max=array[i];
if(array[i]<min) min=array[i];
}

printf("\n\nNej­vetsi hodnota je: %f\n",max);
printf("Nejmensi hodnota je: %f\n",min);
printf("Prumerna hodnota je: %f\n\n",(max+­min)/2);

return 0;
}

 
Odpovědět
11.11.2013 21:21
Avatar
Odpovídá na
Zdeněk Pavlátka:11.11.2013 21:24

Co takhle použít ikonku vložit kód?
A k tvé otázce: nejjednodužší(ale nejpomalejší )řešení je projít postupně pole a pro každý nový prvek si spočítat, kolikrát se vyskytuje. To si uložíš do pomocného pole. No a vypsat to snad zvládneš.

Editováno 11.11.2013 21:28
Nahoru Odpovědět
11.11.2013 21:24
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na
vitamin:11.11.2013 21:28

To pole si najprv zotried, mozes na to pouzit napr: http://en.cppreference.com/…orithm/qsort

Akonahle je zotriedene, tak vsetky rovnake cisla su umiestnene zasebou, takze sa daju lahko spocitat.

Editováno 11.11.2013 21:29
 
Nahoru Odpovědět
11.11.2013 21:28
Avatar
NOOB
Neregistrovaný
Avatar
NOOB:11.11.2013 21:37

Predevsim dekuju za bleskovou odpoved.
A ted k veci.
Teoreticky chapu vysvetleni uzivatele nuz15 , ale prakticky ho nedovedu provest.
V C delam teprve mesic. Nejvice bych ocenil, kdyby jste mi to nazorne ukazal.
Pokud na to nemate cas , nevadi , i tak dekuji za odpoved.

 
Nahoru Odpovědět
11.11.2013 21:37
Avatar
vitamin
Člen
Avatar
Odpovídá na
vitamin:11.11.2013 21:48

To riesenie od nuz15 je na prvy pohlad jednoduche, ale ak nemas naprogramovane asociativne pole tak to uz nie je tak jednoduche :)

Dal som ti zly link, tu je verzia pre C: http://en.cppreference.com/…orithm/qsort

Princip je nasledovny:
mas pole:
[3, 1, 2, 3, 1, 1, 2]

Po zotriedeni bude taketo:
[1, 1, 1, 2, 2, 3, 3]

Teraz staci prejst pole 1x a pocitat rovnake prvky ktore su vedla seba.

 
Nahoru Odpovědět
11.11.2013 21:48
Avatar
NOOB
Neregistrovaný
Avatar
NOOB:11.11.2013 22:15

Prijdu si uplne jako hlupak, ale jak v praxi pocitat rovnake prvky vedle sebe ? a taky, ja mam dynamicke pole s nestalym poctem hodnot a kdyz pouziju navod, ktery jsi mi poslal /* za nějž děkuji, bude se hodit */ tak mi vypisuje i například 45 nul pred treba peti zadanymi hodnotami .

 
Nahoru Odpovědět
11.11.2013 22:15
Avatar
NOOB
Neregistrovaný
Avatar
NOOB:11.11.2013 22:23

Update: Problem s hodne nulami jsem již vyřešil :)

 
Nahoru Odpovědět
11.11.2013 22:23
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na
Lukáš Hruda:12.11.2013 9:27

Pokud jde pouze o celá čísla, můžeš použít systém který používá counting sort. Udělat si pole jehož velikost odpovídá rozsahu hodnoto prvků v tom hlavním poli, to hlavní pole jednou projet cyklem a hodnotu každého prvku použít jako index prvku druhého pole, který při každém průchodu cyklem zvýšíš o jedna. Pole samozřejmě musí být inicializované na samé nuly.
Mohlo by to vypadat třeba takhle.
Hlavní pole:
{1,2,6,0,7,10­,5,8,2,3,4,7,5,4,2,3,1}
Pole počtů hodnot:
{1,2,3,2,2,2,­1,2,1,0,1} -první prvkek je počet nul, druhý počet jedniček, třetí počet dvojek, atd.

 
Nahoru Odpovědět
12.11.2013 9:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.