[Pascal] Instrukcja warunkowa IF

ozzy95
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 13 lis 2012, o 19:13
Płeć: Mężczyzna
Lokalizacja: Oleśnica
Podziękował: 2 razy

[Pascal] Instrukcja warunkowa IF

Post autor: ozzy95 »

Witam. Napisałem dość rozbudowana instrukcję warunkową IF i chyba popełniłem jakiś błąd w składni. Oto ta instrukcja:

Kod: Zaznacz cały

IF podstawa>=wysokosc THEN
                if 2*(podstawa mod wysokosc)/wysokosc>=1 then d:=ceil(podstawa/wysokosc)
                else d:=floor(podstawa/wysokosc);
                        for i:=0 to wysokosc-1 do
                        begin
                                for j:=1 to d*i do
                                begin
                                        write('*');
                                        end;
                                writeln('*');
                                end;

ELSE

                IF 2*(wysokosc mod podstawa)/podstawa=1 THEN d:=ceil(wysokosc/podstawa)
                ELSE d:=floor(wysokosc/podstawa);
                        FOR i:=0 TO wysokosc-1 DO
                        BEGIN
                                FOR j:=1 TO d*i DO
                                BEGIN
                                        write('*');
                                        END;
                                writeln('*');
                                END;
Po próbie odpalenia programu wyskoczył mi błąd "Fatal: Syntax error, "," expected but "ELSE" found
Po naciśniećiu prawego przycisku myszy na błędzie i Track source podświetla mi zaznaczone wyżej ELSE (to pogrubione i podkreślone). Moglibyście mi podpowiedzieć gdzie popełniłem błąd?
Ostatnio zmieniony 17 lis 2012, o 21:50 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code
abc666

[Pascal] Instrukcja warunkowa IF

Post autor: abc666 »

Przed else masz średnik.
ozzy95
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 13 lis 2012, o 19:13
Płeć: Mężczyzna
Lokalizacja: Oleśnica
Podziękował: 2 razy

[Pascal] Instrukcja warunkowa IF

Post autor: ozzy95 »

abc666 pisze:Przed else masz średnik.
Czyli mam skasować jakiś średnik przed else, czy mam jeszcze jakiś dodać?
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[Pascal] Instrukcja warunkowa IF

Post autor: pawel_wr »

Stosujesz nieczytelny i chaotyczny sposób wcięć , który uniemozliwia analizę
zagadnienia. Jeśli kilka instrukcji zamykamy w jedną ( begin..end ) to begin i end
zaczynają sie w tej samej kolumnie. Błędnie ( całkowicie niepotrzebnie
stosujesz ( begin..end) w liniach 7,9,20,22 , bo tu w pętli iteracyjnej występuje tylko jedna
instrukcja.

Bląd kompilacji wynika prawdopodobnie dlatego , że po else w trzeciej linii ciąg instrukcji
nie jest zamknięty w begin..end. To samo dotyczy else w linii 16.
Awatar użytkownika
gildon
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 14 paź 2012, o 18:38
Płeć: Mężczyzna
Lokalizacja: Trójmiasto

[Pascal] Instrukcja warunkowa IF

Post autor: gildon »

Może po prostu zamiast else użyjesz kolejnego if
Ja tak robię, nie używam else. Za dużo roboty z nim jest
zamiast else możesz zrobić np. tak:
if(zmienna1=zmienna2)then
begin
....................
....................
end;
if(zmienna1<>zmienna2)then
begin
....................
....................
end;
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[Pascal] Instrukcja warunkowa IF

Post autor: ksisquare »

Papcio Wirth przy okazji MODULI wpadł na pomysł, a może po prostu pisząc w Pascalu,
że słowo "BEGIN" jest często zbędne.
Przeredagowałem trochę Twój tekst.

Kod: Zaznacz cały

IF podstawa>=wysokosc THEN
    if 2*(podstawa mod wysokosc)/wysokosc>=1 then 
        d:=ceil(podstawa/wysokosc)
    else d:=floor(podstawa/wysokosc);
for i:=0 to wysokosc-1 do begin
    for j:=1 to d*i do begin
        write('*');
    end;
    writeln('*');
end;

ELSE        { < ----------------------------------- ????????????   }

IF 2*(wysokosc mod podstawa)/podstawa=1 THEN 
    d:=ceil(wysokosc/podstawa)
ELSE 
    d:=floor(wysokosc/podstawa);
FOR i:=0 TO wysokosc-1 DO BEGIN
    FOR j:=1 TO d*i DO BEGIN
        write('*');
    END;
    writeln('*');
END;
ODPOWIEDZ