Pole a třídění – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pole a třídění – C / C++ – Fórum – Programujte.comPole a třídění – C / C++ – Fórum – Programujte.com

 

sXe
~ Anonymní uživatel
31 příspěvků
16. 11. 2009   #1
-
0
-

Zdravím,
mám zadání "Vypište ze tří čisel nejmenší, největší a střední hodnotu." Vyřešil jsem jej následujícím kodem ale chtěl bych přijít na něco elegantnějšího, je to taková brute force metoda.. Mohli by jste mi poradit?

#include <stdio.h>

#include <stdlib.h>

int main()
{
int a,b,c;
printf("Zadejte prvni cislo: ");
scanf("%i", &a);
printf("Zadejte druhe cislo: ");
scanf("%i", &b);
printf("Zadejte treti cislo: ");
scanf("%i", &c);

if(a<b && a<c)
{
printf("Nejmensi cislo je %i\n",a);
if(b<c)
{
printf("Nejvetsi cislo je %i\n",c);
printf("Stredni cislo je %i\n",b);
}
else
{
printf("Nejvetsi cislo je %i\n",b);
printf("Stredni cislo je %i\n",c);
}
}

if(b<a && b<c)
{
printf("Nejmensi cislo je %i\n",b);
if(a<c)
{
printf("Nejvetsi cislo je %i\n",c);
printf("Stredni cislo je %i\n",a);
}
else
{
printf("Nejvetsi cislo je %i\n",a);
printf("Stredni cislo je %i\n",c);
}
}
else
{
printf("Nejmensi cislo je %i\n",c);
if(a<b)
{
printf("Nejvetsi cislo je %i\n",b);
printf("Stredni cislo je %i\n",a);
}
else
{
printf("Nejvetsi cislo je %i\n",a);
printf("Stredni cislo je %i\n",b);
}
}
system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: 217.197.36.–
liborb
~ Redaktor
+18
Guru
17. 11. 2009   #2
-
0
-

Něco elegantnějšího říkáš :-). Tak co třeba je setřídit tj. porovnat vždy 2 proměnné a případně prohodit jejich hodnoty:

if (a > b) {

int pom = a;
a = b;
b = pom;
}


Když to obdobně uděláš pro všechny kombinace (a-c, b-c), tak na konci budeš mít nejmenší v a, prostřední v b a největší v c.

Nahlásit jako SPAM
IP: 195.189.142.–
KIIV
~ Moderátor
+43
God of flame
17. 11. 2009   #3
-
0
-

To liborb : co rovnou dat ty 3 cisla do pole a nahnat na to treba serazeni.. na neco tak malyho staci bohate bubble sort

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
liborb
~ Redaktor
+18
Guru
17. 11. 2009   #4
-
0
-

To KIIV : No jasně ... pole ... třídění. Ale podle zadání je to tak 2. maximálně 3. ročník střední školy, je teprve čtvrtletí, tak bych si tipnul, že pole je pro ně zatím španělská vesnice.

Nahlásit jako SPAM
IP: 195.189.142.–
KIIV
~ Moderátor
+43
God of flame
17. 11. 2009   #5
-
0
-

To liborb : se nauci.. google a jedou...

no dobre .. ja sem uz co se tyce zacatecniku naprosto mimo .. uz je proste nechapu

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
liborb
~ Redaktor
+18
Guru
17. 11. 2009   #6
-
0
-

To KIIV : Řekněme, že u některých jedinců je možné považovat za úspěch, když dokážou sesmolit (pochopitelnou) otázku na nějakém fóru :-). Všechno je otázka přístupu a valné většině začátečníků chybí vůle něco dokázat, zvládnout to sám. Když má někdo kódu na 2 programy a neumí převést záporné číslo na kladné, tak co si o tom myslet ... a vůle k nějakému experimentování? Pokladnám v supermarketech roste nová obsluha :-) (někdo to dělat musí než budou všude samoobslužné).

Nahlásit jako SPAM
IP: 91.203.96.–
liborb
~ Redaktor
+18
Guru
17. 11. 2009   #7
-
0
-

To KIIV : Řekněme, že u některých jedinců je možné považovat za úspěch, když dokážou sesmolit (pochopitelnou) otázku na nějakém fóru :-). Všechno je otázka přístupu a valné většině začátečníků chybí vůle něco dokázat, zvládnout to sám. Když má někdo kódu na 2 programy a neumí převést záporné číslo na kladné, tak co si o tom myslet ... a vůle k nějakému experimentování? Pokladnám v supermarketech roste nová obsluha :-) (někdo to dělat musí než budou všude samoobslužné).

Nahlásit jako SPAM
IP: 91.203.96.–
Grungy0
Super člen
17. 11. 2009   #8
-
0
-

To sXe : Pre maximum a minimum máš tri možnosti:
1. to čo spomínal KIIV ... dať to do pola a pretriediť

2. velmi elegantné riešenie cez funkcie ak ste ich už mali

int maximum(int x,int y)

{
if(x>y) return x;
lese return y;
}

int main()
{
int a,b,c,vysledok;
//nejake to nacitanie do a,b,c
vysledok=max(a,max(b,c));
}



3. Riešiť to pomocou podmienok. Niečo podobné ako si to rozpisoval ty ale kratšie.
int main()

{
int a,b,c,vysledok;
//zas nacitas
if(a>b)
{
if(a>c) vysledok=a;
else vysledok=c;
}
else
{
if(b>c) vysledok=b;
else vysledok=c;
}
}


Všetko som to písal pre maximum, ale keď sa posnažíš tak upraviť to aby to fungovalo pre minimum nemôže byť problém. Máš z čoho vyberať tak do toho, držím palce.

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
LJ10240
Stálý člen
17. 11. 2009   #9
-
0
-

A co treba:

#include <stdio.h>

#include <stdlib.h>

int main(){
int a,b,c;
int max,str,min;
printf("Zadejte prvni cislo: ");
scanf("%i", &a);
printf("Zadejte druhe cislo: ");
scanf("%i", &b);
printf("Zadejte treti cislo: ");
scanf("%i", &c);

max=(a>b) ? a : b;
max=(max>c) ? max : c;
min=(a<b) ? a : b;
min=(min<c) ? min : c;
str=(a != max && a != min) ? a : ((b != max && b != min) ? b : c);
printf("Nejvetsi: %i\nStredni: %i\nNejmensi: %i\n", max, str, min);
system("PAUSE");
return 0;
}


Edit: pokud teda vis, ze
a = (x < y) ? x : y;
je stejne jako
if(x < y)
a=x;
else
        a=y;

Nahlásit jako SPAM
IP: 217.30.64.–
sXe
~ Anonymní uživatel
31 příspěvků
17. 11. 2009   #10
-
0
-

Oh, díky moc za tolik inspirativních příspěvků, mě vždycky napadnou samé složitosti, je nádhera jak to jde jednoduše napsat. Včera jsem nad tím doumal a přišel jsem jen na toto:

  if(a<b && a<c)

{
male=a;
cache1=b;
cache2=c;
}
else if(b<a && b<c)
{
male=b;
cache1=a;
cache2=c;
}
else
{
male=c;
cache1=a;
cache2=b;
}

if(cache1<cache2)
{
stredni=cache1;
velke=cache2;
}
else
{
stredni=cache2;
velke=cache1;
}

No hrůza. :-D

Nahlásit jako SPAM
IP: 217.197.36.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 138 hostů

Podobná vlákna

Třídění — založil Frantisek

Trideni jmen — založil Lukáš

Třídění CSV v C++ — založil peteer1

Třídění čísel — založil Kaja

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý