Avatar
NOOB
Neregistrovaný
Avatar
NOOB:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na NOOB
Zdeněk Pavlátka:

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 NOOB
vitamin:

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  +1 11.11.2013 21:28
Avatar
NOOB
Neregistrovaný
Avatar
NOOB:

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 NOOB
vitamin:

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:

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:

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

 
Nahoru Odpovědět 11.11.2013 22:23
Avatar
Odpovídá na NOOB
Lukáš Hruda (Luckin):

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.