logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[c++] Sprawdzenie algorytmu porównującego liczby a, b, c w C++ - pomoc w ifach

simlook 18 Gru 2006 20:49 4391 33
Najlepsze odpowiedzi

Jak poprawnie zapisać w C++ zagnieżdżone instrukcje if/else, żeby porównać trzy liczby a, b i c i wypisać ich kolejność bez błędów w schemacie blokowym?

Najprościej zrób zagnieżdżone `if/else`, bo dla trzech liczb trzeba rozpatrzyć 6 możliwych kolejności, a blok decyzyjny ma jedno wejście i dwa wyjścia [#3346600][#3346397][#3346845] Jeśli `a > b`, sprawdzasz dalej `b > c`; gdy to fałsz, sprawdzasz `a > c`, a w drugiej gałęzi (`a <= b`) rozpatrujesz `b > c` i potem `c > a` [#3347829] Taki układ pozwala obsłużyć wszystkie permutacje, np. `a > b > c`, `a > c > b`, `b > a > c`, `b > c > a`, `c > a > b` i `c > b > a` [#3346845][#3347829] W kodzie ważne są poprawne nawiasy klamrowe `{}` i wcięcia, bo wtedy widać, który `else` należy do którego `if` [#3347215] W jednym z komentarzy zwrócono też uwagę, że w opisie porównania nie powinno być „różne”, tylko „mniejsze lub równe” [#3346397]
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA
  • #1 3346139
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    witam napisałem prosty program w c++ który wypisuje a>b>c czy mógłby mi ktoś powiedzieć czy algorytm jest dobry i co musze wpisać w ify w schemacie blokowym jestem laikiem ale nie chce dostać 1 w szkole za jakąś głupote

    #include "stdafx.h"
    #include <iostream.h>
    #include <conio.h>

    int main(int argc, char* argv[])

    {
    int a, b, c;
    cout << "podaj a:";
    cin >> a;
    cout << "podaj b:";
    cin >> b;
    cout << "podaj c:";
    cin >> c;
    if (a>b)
    cout << a << " jest wieksze od " << b << endl;
    else
    cout << a << " jest mniejsze lub rozne od " << b <<endl;

    {if (b>c)
    cout << b << " jest wieksze od " << c << endl;
    else
    cout << b << " jest mniejsze lub rozne od " << c <<endl;
    }

    {if (a>c)
    cout << a << " jest wieksze od " << c << endl;
    else
    cout << a << " jest mniejsze lub rozne od " << c <<endl;
    }

    getch();
    return 0;
    a tu schemat blokowy http://img274.imageshack.us/my.php?image=atb8.png
  • REKLAMA
  • #2 3346397
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    Zagnieździłabym if-a tzn żeby mieć zależność a, b, c, a nie tylko par.. choć sądząc po schemacie blokowym autorowi zadania (a raczej schematu) chodziło o to, co masz
    Poza tym błąd który rzuca się od razu w oczy:
    w cout << ma być mniejsze lub równe, nie różne
  • REKLAMA
  • #3 3346434
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    musze mieć schemat blokowy dokładnie taki sam jak algorytm co w tym schemacie zmienic i co dodać
  • #4 3346476
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    tzn schemat blokowy jest twojego autorstwa?
    jeśli tak, to podaj dokładnie treść polecenia
  • #5 3346567
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    Tak i algorytm tez tylko teraz nie wiem co dodać lub zmienić w schemacie blokowym bo program jest chyba dobry kompiluje się i działa dobrze wypisuje wszystko jak trzeba
  • REKLAMA
  • #6 3346596
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    tak na marginesie, to, że się kompiluje, to jeszcze nie znaczy, że jest dobry... ;-)

    a co do schematu blokowego, to nadal nie wiem, czy program ma wypisywać np
    a<b
    b<c
    a<c
    czy np
    a<c<b
    a to ma dość duże znaczenie ;-)
  • #7 3346600
    maxter_xx
    Poziom 14  
    Posty: 76
    Pomógł: 7
    W sumie to ja bym się najpierw przyczepił do tego algorytmu bo na nim są podstawowe błędy mianowicie blok decyzyjny na mieć jedno wejście i dwa wyjścia a nie trzy wyjścia. Narysuj to tak jak ma być a nie "na skróty".
  • #8 3346642
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    charm_spider dużo więcej kombinacji będzie z a<c<b?bo chyba o to chodziło
  • #10 3346733
    smokie2
    Poziom 13  
    Posty: 85
    Pomógł: 5
    Ocena: 4
    witam. wg mnie ten algorytm powinien wygladac tak :
    sry za jakosc szybkie rysowanie w paincie ;P
    Załączniki:
    • [c++] Sprawdzenie algorytmu porównującego liczby a, b, c w C++ - pomoc w ifach algorytm.jpg (64.34 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 3346743
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    jak 6 ifów.możesz to dokładniej objaśnić? Dzięki smokie ten schemat widze że pasuje do mojego algorytmu,
  • #12 3346845
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    nie 6 ifów, tylko 6 możliwych kombinacji "kolejności" a, b, c (właściwie to permutacje ;-) )

    to jest niedokończone (brakuje "wyjść" z jednego if-a..), ale widać z tego, co mam na myśli (no dobra, nie jest to najbardziej eleganckie rozwiązanie, ale najbardziej naturalne, więc... )
    http://img347.imageshack.us/img347/8682/shot1166479123ix1.jpg
  • #13 3346867
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    sory ja rezygnuje:( nie jestem do tego stworzony bardziej się widze w sieciach:(( dzięki charm i smokie za wasz stracony czas $$
  • #14 3346900
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    nie ma za co :-)

    poza tym nie poddawaj się tak szybko.... ;-) programowanie jest znacznie ciekawsze od sieci... ;-)

    to na prawdę nie jest trudne ;-)

    pzdr
    agnieszka
  • REKLAMA
  • #15 3346918
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    hehe mnie to nie rajcuje zbytnio schemat blokowy już jest moze się troche pogłowie jak do tego schamtu napisać algorytm najgorsze jest rozmieszczenie ifów w algorytmie, po każdym ifie musi być wypisanie przykład: cout << X << " jest większe " << X <<endl;
    ??
  • #16 3346929
    maxter_xx
    Poziom 14  
    Posty: 76
    Pomógł: 7
    Algorytm to tak bym narysował. Czyli podobnie jak charm_spider.
    I nie poddawaj się bo zakodować to jest łatwiej niż Ci się wydaje.

    Pozdrawiam
    Załączniki:
    • [c++] Sprawdzenie algorytmu porównującego liczby a, b, c w C++ - pomoc w ifach d1.png (15.45 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 3346944
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    Po ifie może być coś więcej niż jedna linijka, w końcu po to są { } ;-)
    mogę podpowiadać, ale całego programu za ciebie nie napiszę... i zapewne nikt z tego forum tego nie zrobi.

    A jeśli chcesz w przyszłości robić cokolwiek związanego z informatyką i tak będziesz się musiał przełamać do programowania i tak, więc...;-)
  • #18 3347021
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    if (a>b)
    {
    if (b>c)
    cout << a << " jest wieksze od " << b << " jest wieksze od " << c <<endl;,
    }
    else
    {
    if (a>c)
    cout << a << " jest wieksze od " << b << " jest wieksze od " << c <<endl;
    }
    else
    cout << c << " jest wieksze od " << a << " jest wieksze od " << b <<endl;

    else
    {
    if (b>c)
    cout << a << " jest wieksze od " << b << " jest wieksze od " << c <<endl;
    }
    else
    cout << a << " jest wieksze od " << b << " jest wieksze od " << c <<endl;
    coś wymodziłem pewnie żle przy kompilacji 3 błędy mam:
    G:\cw\2\2.cpp(28) : error C2181: illegal else without matching if
    G:\cw\2\2.cpp(31) : error C2181: illegal else without matching if
    G:\cw\2\2.cpp(36) : error C2181: illegal else without matching if
    Error executing cl.exe.
  • #19 3347034
    maxter_xx
    Poziom 14  
    Posty: 76
    Pomógł: 7
    Mała rada: rób wcięcia w kodzie bo z tego nic nie można odczytać i jak tutaj wklejasz fragmenty to zaznacz że to jest Code. Wtedy nie będzie formatowany tekst.
  • #20 3347041
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    simlook napisał:
    coś wymodziłem pewnie żle

    a konkretniej { }
    jak zrobisz wcięcia to będziesz widział co ;-)
  • #21 3347087
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    dobra tylko gdzie mam wstawiać {}-jak się nie myle sa to zagnieżdzenia wstawiałem to na wyczucie
  • #22 3347090
    smokie2
    Poziom 13  
    Posty: 85
    Pomógł: 5
    Ocena: 4
    if (a>b)
       {
          if (b>c)
          cout << a << " jest wieksze od " << b << " jest wieksze od " << c <<endl;
       
          else
             {
                if (a>c)
                cout << a << " jest wieksze od " << c << " jest wieksze od " << b <<endl;
                else
                cout << c << " jest wieksze od " << a << " jest wieksze od " << b <<endl;
             }
       }
    else
       {
          if (b>c)
    	{
    		if(c>a)
          		cout << b << " jest wieksze od " << c << " jest wieksze od " << a <<endl;
    		else
    		cout << b << " jest wieksze od " << a << " jest wieksze od " << c <<endl;
    	}
          else
          cout << c << " jest wieksze od " << b << " jest wieksze od " << a <<endl;
       }


    teoretycznie powinien dzialac. :D
  • #23 3347105
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    simlook napisał:
    wstawiałem to na wyczucie


    właśnie w tym celu robi się wcięcia, żeby nie wstawiać na wyczucie... ;-)
    wtedy widać który else jest do którego ifa, itp
  • #24 3347141
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    aha czyli całego ifa łącznie z else i zawartością else i tak dla każdego ifa?
  • #25 3347180
    charm_spider
    Poziom 22  
    Posty: 541
    Pomógł: 39
    Ocena: 13
    nie do końca zrozumiałam to zdanie, ale jeśli zrozumiałam, to mniej więcej o to chodzi... ;-)
  • #26 3347202
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    	if (a>b)
    	{
    		if (b>c)
    			cout << a << "  jest wieksze od  " << b << "  jest wieksze od  " << c <<endl;	
    	
    	else
    	
    	if (a>c)
    		cout << a << "  jest wieksze od  " << b << "  jest wieksze od  " << c <<endl;
    		}
    			else
    				cout << c << "  jest wieksze od  " << a << "  jest wieksze od  " << b <<endl;
    	else
    	{
    		if (b>c)
    			cout << a << "  jest wieksze od  " << b << "  jest wieksze od  " << c <<endl;	
    				else
    					cout << a << "  jest wieksze od  " << b << "  jest wieksze od  " << c <<endl;
    	}
    	getch();
    	return 0;
    }
    
    taki mam błąd chyba musze dodać jeszcze 1 ifa ale nie widze zbytnio gdzie
    G:\cw\2\2.cpp(30) : error C2181: illegal else without matching if
    Error executing cl.exe.

    2.exe - 1 error(s), 0 warning(s)
  • #28 3347239
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    program uruchomiłem ale
    			if (a>b)	
    		if (b>c)
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest większe od  " << c <<endl;	
    		}
    	else
    	
    	if (a>c)
    		{
    		cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;
    		}
    			else
    				cout << c << "  jest wieksze od  " << a << "  jest mniejsze od  " << b <<endl;
    	else	
    		if (b>c)
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;	
    		}
    		else
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest większe od  " << c <<endl;
    		}
    	getch();

    podałem dane 9,16,18
    wypisał 9 jest większe od 16 jest większe od 18 gdzie musze pozmieniać większości i mniejszości?
  • #29 3347264
    maxter_xx
    Poziom 14  
    Posty: 76
    Pomógł: 7
    Naucz się czystości kodu! Wcięcia robisz chaotycznie i dalej ciężko cokolwiek wywnioskować. Tak wygląda Twój kod (a raczej kod kolegi smokie2):
    if (a>b)    
    	if (b>c) 
    		cout << a << "  jest wieksze od  " << b << "  jest większe od  " << c <<endl;    
    	else 
    		if (a>c) 
    			cout <<a<< "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl; 
    		else
    			cout <<c<< "  jest wieksze od  "<< a <<"  jest mniejsze od  "<<b<<endl; 
    else    
    	if (b>c) 
    		cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;    
    	else 
    		cout << a << "  jest wieksze od  " << b << "  jest większe od  " << c <<endl; 
    
    getch();

    Nikt nie mówił, że on go dobrze napisał. Przeanalizuj a zobaczysz.
  • #30 3347287
    simlook
    Poziom 12  
    Posty: 103
    Pomógł: 2
    Ocena: 2
    ja jego kodu nie skopiowałem zauważ że post wyżej jest to samo ale troche syfiaste
    if (a>b)	
    		if (b>c)
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;	
    		}
    		else
    	
    			if (a>c)
    		{
    				cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;
    		}
    			else
    				cout << c << "  jest wieksze od  " << a << "  jest mniejsze od  " << b <<endl;
    else	
    	if (b>c)
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;	
    		}
    	else
    		{
    			cout << a << "  jest wieksze od  " << b << "  jest mniejsze od  " << c <<endl;
    		}
    już wiem jak porządkować:P
    ale nie widze gdzie jest błąd:/analizowałem i nic

Podsumowanie tematu

✨ Dyskusja dotyczy poprawności algorytmu w C++ służącego do porównywania trzech liczb całkowitych a, b, c i wypisywania ich relacji w formacie a > b > c. Autor programu prosi o pomoc w poprawnym skonstruowaniu instrukcji warunkowych if oraz schematu blokowego, aby uniknąć błędów składniowych i logicznych. Wskazano, że blok decyzyjny powinien mieć jedno wejście i dwa wyjścia, a także konieczne jest stosowanie odpowiednich nawiasów klamrowych {} oraz wcięć dla czytelności kodu i poprawnego powiązania instrukcji else z if. Podkreślono, że istnieje 6 możliwych permutacji kolejności liczb, które należy uwzględnić w algorytmie. Zaproponowano zagnieżdżone instrukcje if-else, które poprawnie obsługują wszystkie przypadki porównań, wraz z przykładami kodu bez błędów kompilacji. Zwrócono uwagę na konieczność dokładnego formatowania kodu i konsekwentnego stosowania nawiasów, aby uniknąć błędów typu "illegal else without matching if". Autor otrzymał również zachętę do dalszej nauki programowania oraz propozycje literatury dotyczącej C++.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA