Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj, zacinam s programovanim a mam tento problem:
Chci dat do IF dve podminky:
readln(n);
if (n>1) and (n<1000) then
writeln(n)
Programu se to takhle nelibi a pise, ze ocekaval LongInt a dostal boolean. V podstate uplne stejnej problem mam i s repeat.
Nejak nemuzu pochopit proc se mu te nelibi, vzdyt preci if pracuje s vyrokem ne? A melo by byt jedno jestli tam dam jeden vyrok nebo nejakou slozeninu.
Mate nekdo nejake vysvetleni?
Dik y.
Offline
program proc_nefunguje; var tabulka:array[1..10000] of boolean; n,i,a: integer; begin repeat writeln('Zadej pritozene cislo vetsi jedne a mensi 10000'); readln(n); if (n>1) and (n<10000) then writeln('zadali jste cislo ',n); until (n<1) and (n<10000) ; readln() end.
Problem ktery, jsem popisoval v uvodu vymizel. Ale ted resim jiny problem. Ze zdrojoveho kodu je patrne, ze pozaduji aby bylo zapsane prirozene cislo mensi 10 000.
Kdyz jsem program skousel, treba na -5, tak prikaz IF to vyhodnotil jako true a normalne vypsal:" zadali jste cislo -5." Coz by delat nemel ne?
Offline
↑ Ondrik_B:
Aby ti to bralo přirozená čísla menší než 10000, pak to musí vypadat takto:
(z programu je možné vyskočit až zadáš číslo mimo interval.
repeat writeln('Zadej pritozene cislo vetsi jedne a mensi 10000'); readln(n); if (n>=1) and (n<10000) then writeln('zadali jste cislo ',n); until (n<1) or (n>=10000);
Offline
↑ Honzc:
To myslim neresi moji situaci. Dovysvetlim, co po programu chcu. Zkratka, chci aby pokazde, kdyz vstup nebude z intervali [2,9999] (prirozene), napsal 'Zadej pritozene cislo vetsi jedne a mensi 10000'. A pak aby byla nova moznost pro zadani cisla.
A za tim bude pokracovat dalsi algoritmus. (Erasthetonovo sito)
Je z toho patrny o co mi jde?
Offline
↑ Ondrik_B:
Ahoj,
v Pascalu jsem už dlouho nic nepsal, takže se možná mýlím, ale nemáš náhodou chybu v syntaxi podmínky? Pokud se nepletu, Pascal vyžaduje mít celou podmínku v závorce, tj.:
if ((n>1) and (n<10000)) then .....
Offline
↑ Ondrik_B:
Cetl jsi radu, kterou ti psal ↑ runcorne:?
Ty chces aby se ti opakoval dotaz na vstup cisla, dokud toto nebude z pozadovaneho intervalu.
Tvuj program ma napsany cyklus jako:
repeat ... until ((n < 1) and (n < 10000))
Kdyz si to prelozis do cestiny z programovaciho jazyka (a z anglictiny), tak to znamena: "Opakuj dokud promenna n nebude mensi nez 1 nebo mensi nez 10000", takze kdyz zadam zaporne cislo, tak se tvuj cyklus zastavi, protoze n < 1 (priklad: vlozim -10, cyklus dojde nakonec a podiva se na podminku je -10 mensi nez 1? -> Ano je -> Zastav cyklus. A skoncil jsi s n = -10).
Upravil bych podminku, jak ti radi runcorne na until ((n > 1) and (n < 10000)), toto znamena, ze se porgram bude opakovat dokud cislo n nebude z intervalu (1, 10000).
Pozn.: Tvuj kod opakuje cyklus dokud nedostane n z intervalu (-nekonecno, 10000) - to minus nekonecno je tu jen ilustrativne, ve skutecnosti jde o nejmensi cislo, co tvuj program jeste zvladne.
Offline
↑ Ondrik_B:
V zadání je pořeba napsat co chceš
Tedy po upřesnění tvého požadavku:
begin write('Zadej pritozene cislo vetsi jedne a mensi 10000'); readln(n); while (n<=1) and (n>=10000) do begin writeln; writeln('Zadej pritozene cislo vetsi jedne a mensi 10000'); readln(n); end; writeln; writeln('zadali jste cislo ',n); readln; end;
Offline
↑ O.o:
Ano problem vyresi presne to co psal runcorne. Hloupa chyba pro psani kodu a jeste hloupesi pri cteni prispevku. Omlouvam se vsem zucastnenym. Ted uz mi je zrejme, proc se mi program choval, jak se choval. Diky
Offline
↑ Ondrik_B:
Omlouvat se neni za co, na foru se lide ptaji, tak uz to byva ;-).
Mej se pekne a zase priste ahoj.
Offline