NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Porovnání tři čísel

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Matej
Člen
Avatar
Matej :12.11.2017 16:47

Ahoj, jak by se udělal program, který by porovnal tři čísla?
Pokud jde o základní typ - vypíš největší čislo, to zvládám, ale nevím jak udělat, aby je to porovnalo podle velikosti.

 
Odpovědět
12.11.2017 16:47
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Matej
Petr Nymsa:12.11.2017 16:52

Porovnani vice cisel je problem serazeni cisel. Koukni na zdejsi serialy o algortimech. Cisla nasazia do pole a seradis.
Jinak konrketneji pro 3 cisla, muzes vyresit i neelegantnim zpusobem a to nekolik podminek.

Nahoru Odpovědět
12.11.2017 16:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Matej
Člen
Avatar
Matej :12.11.2017 17:04

Nemohl bys mi ro napsat

 
Nahoru Odpovědět
12.11.2017 17:04
Avatar
Odpovídá na Matej
Matúš Olejník:12.11.2017 18:01

Existuje veľa spôsobov, ale ak chceš len vypísať zoradené tri čísla môžeš pre spestrenie použiť napríklad takýto spôsob :)

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

#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))

int main() {
    int a, b, c;
    int min, mid, max;

    //nacitaj tri cisla

    min = min(min(a, b), c);
    max = max(max(a, b), c);
    mid = a + b + c - min - max;

    printf("%d %d %d\n", min, mid, max);

    return 0;
}
Nahoru Odpovědět
12.11.2017 18:01
/* I am not sure why this works but it fixes the problem */
Avatar
Matej
Člen
Avatar
Matej :12.11.2017 18:29

Děkuji ti, ale jak se to udělá, jen když znám základy jazyka C?

 
Nahoru Odpovědět
12.11.2017 18:29
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Matej
gcx11:12.11.2017 20:15

Tak použiješ hodně podmínek a podle toho, do jakého případu to spadne, tak budeš vědět, v jakém pořadí bys je měl vypsat.

 
Nahoru Odpovědět
12.11.2017 20:15
Avatar
Matej
Člen
Avatar
Matej :12.11.2017 20:57

Takhle?

 
Nahoru Odpovědět
12.11.2017 20:57
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Matej
gcx11:12.11.2017 21:49

Pokud to funguje správně, tak ano. A ten return by podle mě stačil akorát na konci.

 
Nahoru Odpovědět
12.11.2017 21:49
Avatar
David Dostal
Tvůrce
Avatar
Odpovídá na Matej
David Dostal:13.11.2017 13:08

Ahoj, existuje i jednodušší způsob, kterým prohodíš obsah proměnných tak, že na konci budou seřazené. Pro více čísle to ale samozřejmě nebude už tak jednoduché :-) V pseudokódu (předpokládám seřazení od nejmenšího po největší, obráceně by to šlo také):

// chybí načtení proměnných od uživatele a tak...

if(a > b) {
    int temp = a;
    a = b;
    b = temp;
}
if(b > c) {
    int temp = b;
    b = c;
    c = temp;
}
if(a > b) {
    int temp = a;
    a = b;
    b = temp
}

printf("%d %d %d\n", a, b, c);

Proměnné a, b, c obsahují na začátku neseřazená čísla od uživatele. Postupně je prohazujeme (pokud již nejsou správně seřazená tak, aby na konci byla vždy ve správném pořadí).

  • Nejprve pokud je první číslo větší než druhé, tak je prohodíme (přecijen větší číslo by mělo přijít později než menší)
  • Stejně tak prohodíme i druhé a třetí pokud již nejsou seřazená.
  • Nakonec znovu porovnáme první a druhé pro případ, že nejmenší číslo přišlo až třetí.

Příklad: na začátku máme 3, 2, 1. První dvě čísla prohodíme - 2, 3, 1, další dvě také (3 > 1) - dostaneme 2, 1, 3. Tím se nám jednička z konce dostala doprostřed. Nakonec ještě prohodíme jedničku a dvojku a máme seřazeno - 1, 2, 3.

PS: Pokud chceme prohazovat dvě čísla, musíme si jedno z nich dočasně uložit do proměnné. Kdybychom tak neudělali a napsali

a = b
b = a

tak do a přiřadíme hodnotu b a když chceme hodnotu a přiřadit do b, nebude tam původní hodnota a ale nově přiřazená hodnota b.

Snad je to srozumitelné :-)

Editováno 13.11.2017 13:10
 
Nahoru Odpovědět
13.11.2017 13:08
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 9 zpráv z 9.