Potřeboval bych pomoct s tímto zadáním, neví někdo jak na to?
Program načte neprázdnou posloupnost celých nenulových čísel ukončenou číslem nula a zjistí, zda je tato posloupnost klesající (další číslo vždy menší než předchozí).
Potřeboval bych pomoct s tímto zadáním, neví někdo jak na to?
Program načte neprázdnou posloupnost celých nenulových čísel ukončenou číslem nula a zjistí, zda je tato posloupnost klesající (další číslo vždy menší než předchozí).
#3 Petr Jureček
Program se neřeší, ten se píše až máš vyřešený algoritmus.
Tak pěkně od začátku.
Umíš napsat program, který přečte jedno číslo a vypíše ho?
Pokud ano, tak ho napiš a ukaž. Pokud ne, tak se to nauč. Když si nebudeš vědět rady s konkrétní věcí, kterou nenajdeš ani v poznámkách ze školy, ani v nápovědě, ani na internetu, tak se tady znovu zeptej.
Hlavně nečekej, že to za tebe někdo udělá.
http://programujte.com/clanky/46-serial-delphi/ najprv si prečitaj a potom píš...
#4 JoDiK
Mám skoro hotovo, ale bohužel jsem se zasekl a nevím kde je chyba, mohl byses na to kouknout? Dám přepis do Delphi
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i,n,min,min1:integer;
a:array [1..100] of integer;
procedure prd;
begin
n:=3;
a[1]:=3;
a[2]:=1;
a[3]:=2;
min:=maxint;
for i:=1 to n do
if a[i]<min then min:=a[i];
for i:=1 to n do
if a[i]=min then begin write(a[i]); writeln(' ', i); min1:=maxint; min:=a[i]; end;
for i:=1 to n do
if a[i]>min then begin if a[i]<min1 then min1:=a[i];
end;
for i:=1 to n do
if a[i]=min1 then begin write(a[i]); writeln(' ', i); min1:=maxint; min:=a[i]; end;
for i:=1 to n do
if a[i]>min then begin if a[i]<min1 then min1:=a[i];
end;
for i:=1 to n do
if a[i]=min1 then begin write(a[i]); writeln(' ', i); min1:=maxint; min:=a[i]; end;
end;
begin
prd;
readln
end.
#7 JoDiK
Máš pravdu, zkopíroval jsem program co jsme dělali ve škole, podle mě to bude vypadat nějak takhle:
for I:=1 to N-1 do
if A[I]>A[I+1] then begin
POM:=A[I];
A[I]:=A[I+1];
A[I+1]:=POM;
end;
zatím jsem v této fázi, je to dobře? Jde vidět, že tomu hodně rozumíš, já měl teprv 5 cvik a hned na nás vybalily program
#10 Petr Jureček
Chyba je v tom, že jsi nepochopil zadání. Ty nemáš ani hledat minimum, ani třídit. Máš jen zjistit stav posloupnosti a vypsat tu informaci (jestli je nebo není klesající). Když to setřídíš, tak jaksi zrušíš tu původní posloupnost včetně vlastnosti, kterou máš zjišťovat...
#12 JoDiK
A jak jsem psal na začátku - řešení máš uvedeno přímo v zadání v závorce. Tak udělej to co je tam psáno - zjisti, jestli pro všechny prvky posloupnosti platí, že následující prvek je menší. Předpokládám, že logické proměnné jste brali - tak dej výchozí stav že posloupnost je klesající a jestli třeba jediný prvek nesplňuje podmínku, tak to změň na nepravdu a na závěr vypiš jestli posloupnost je či není klesající.
JoDiKu, tady přikládám tvůj úkol ze začátku:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
A:Real;
begin
{èíslo,které jsi chtìl}
ReadLn(A);
WriteLn(A:7:2);
{ TODO -oUser -cConsole Main : Insert code here }
end.
napsal jsem číslo a vypsalo ho, co dál?
V zadání máš určit "zda je tato posloupnost klesající (další číslo vždy menší než předchozí)."
1.V cyklu od i := 1 to n-1 budeš brát čísla z pole (to už jsi někde udělal)
2.Porovnáš (příkaz if) zda je a[i]<a[i+1], když ano, tak je jasné, že posloupnost není klesající. Tak si v tom případě do
nějaké proměnné třeba pom, (které na začátku přiřadíš nulu) dáš v tom případě 1. Tím pádem můžeš z cyklu
vyskočit. To se dělá příkazem Break.
3.Takže ti buď projede celý cyklus - podmínka nebude splněna a tedy v pom budeš mít 0 (a posloupnost bude
klesající), nebo bude splněna a tedy v pom budeš mít 1.
4. Podle hodnoty pom pak vypíšeš (příkazem if) zda je klesající nebo ne
if pom=0 then
WriteLn('Posloupnost je klesajici')
else
WriteLn('Posloupnost neni klesajici');
#16 Petr Jureček
Koukám, že jsi pracoval dlouho do noci... Tak tady máš postupně další úkoly. Jak to budeš stíhat, tak to sem dej, já se občas kouknu...
1. Uprav deklaraci proměnné na celočíselný typ.
2. Vypiš informaci, jestli je to zadané číslo nulové či nikoliv.
3. Jestli je to zadané číslo záporné, tak k němu přičti jeho kladný dvojnásobek.
4. Dokud je to zadané číslo větší jak 5, tak od něho odečítej hodnotu 3 a průběžně vypisuj aktuální stav.
úkol 1:
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I:Integer;
begin
I:=1;
{ TODO -oUser -cConsole Main : Insert code here }
end.
#19 Petr Jureček
K tomu kódu: Seš si jistý, že rozumíš tomu, co je tam napsané? Pokud ne, pokračuj v mém zadání, máš-li zájem tomu rozumět. Pokud ne, tak si to od někoho hotové zkopíruj a neřeš a po ničem nepátrej.
BTW: to, co jsi sem dal je jeden průchod bublinkového třídění, který přehazuje sousední hodnoty v poli, pokud nesplňují podmínky. To co ti radil Honzc přece není to samé, sice se to porovnává stejně, ale nic se neprohazuje, jen se vyhodnocuje jestli je to v pořádku... On ti radí přiřadit někam jedničku, já bych na to šel přes logickou proměnnou.
Tak jak mi to napsal on rozumně, tak tomu rozumím co tam probíhá, ale když mi zadáš úkol tak je pro mě celkem těžké, to sám udělat, proto chci od tebe pomoc. Snažím se udělat co po mě žádáš
Nevím, zkouším to a prostě na to nepříjdu
#28 Petr Jureček
Aha, no jen jsem si chtěl ověřit jak tomu "rozumíš". No a nerozumíš - přesněji vzájemně si nerozumíme - nevím jestli to vůbec takto půjde přes internet, ale aby jsme si rozumněli, musíš se orientovat v názvosloví.
Takhle nějak jsem si to představoval:
var
c:Integer; { promenna pro cele cislo }
begin
write('Zadej cele cislo : '); { vypis textu na obrazovku }
readln(c); { cteni cisla z klavesnice, zadane cislo se ulozi do promenne c }
writeln('Bylo zadano cislo : ',c); { kontrolni vypis zadaneho cisla }
{ zkoumani, jestli je zadane cislo ulozene v promenne c nulove
vypiš buď text "zadané číslo je nulové" nebo "zadané číslo není nulové" }
end.
No a můžeš pokračovat úkolem 2. - pořád jenom přidávat do předchozího programu!
Ok, na ten program mrknu, chci se zeptat, nějak takhle jsem udělal to moje zadání, mohlo by to tak vypadat?
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
c,posledni:Integer;
temp:String;
poleCisel:array[1..6] of Integer = (5,4,99,2,1,0);
begin
c := 1;
posledni := poleCisel[c]+1;
while(poleCisel[c]<posledni) do
begin
writeln(poleCisel[c]);
posledni := poleCisel[c];
c := c + 1;
if(c>6) then
begin
writeln('Pole je sestupne')
end
else
begin
if(poleCisel[c]>posledni) then
begin
write(poleCisel[c]);
writeln(' neni sestupne');
end
end
end;
readln(temp);
#30 Petr Jureček
Vypadat by to tak mohlo, coby ne, vidím, že místo abys použil návrh obsažený už v zadání, nebo jak ti to rozepsal Honzc, vymýšlíš cosi nového. Neříkám, že je to úplně špatně, ale na splnění zadání ti tam pár drobností chybí a taky si to zkus odladit s jinými vstupními údaji. Co ti to vypíše třeba pro tuto posloupnost?
poleCisel:array[1..6] of Integer = (15,48,99,99,1,0)
Píše mi to chybu hned u toho beginu
Omluva, to první co jsi tu napsal mi to přečetlo, chybělo mi tam ;
výsledek toto:
15
48
není sestupně, ta druhá varianta nefunguje
tu druhé:
956
848
799
699
1
0
pole je sestupně
No, nevím jestli tam má být pole, dostali jsme zadání, nic víc nám k tomu řečeno nebylo
Rozhodlo to, jak mělo, nebo špatně? Co by to podle tebe mělo vyhodit? Vyhodnotilo to dobře, nebo ne?
#39 JoDiK
Hele, zkusíme to jináč, tohle je na dlouho.
Zkus pochopit moje řešení, třeba se to takto naučíš líp...
var c1, c2 : Integer;
klesajici : Boolean;
begin
klesajici := true; { nastav klesající jako pravda }
write('Zadej cislo : '); readln(c1); { přečti první číslo }
write('Zadej cislo : '); readln(c2); { přečti další (druhé) číslo }
While c2 <> 0 do { dokud další číslo není nula opakuj }
begin
If c2 >= c1 Then klesajici := False;
{ jestli další číslo není menší než předchozí tak nastav klesající jako nepravda }
c1 := c2; { ulož další číslo jako nové předchozí }
write('Zadej cislo : '); readln(c2); { přečti další číslo }
end;
if klesajici { vypiš výsledek zkoumání}
then writeln ("Posloupnost je klesajici")
else writeln ("Posloupnost neni klesajici");
end.
To máš tak rychle vyřešené?? jak dlouho programuješ? Nic méně vrhnu se na ty tvoje úkoly, at' si z toho něco odnesu :)
Ten konec jsem napsal takto:
if klesajici { vypiš výsledek zkoumání}
then writeln ('Posloupnost je klesajici')
else writeln ('Posloupnost neni klesajici');
protože mě to přes " nechtělo pustit, pak mě to už pustilo, ale chce to po mě číslo, tak ho zadám, chce to po mě další a pořád to chce jenom čísla a výsledek žádný
#42 Petr Jureček
Jasně, nemám tu pascal tak jsem to převedl z visualbasicu, tam jsou dvojité uvozovky.
Nemáš náhodou v zadání řečeno "Program načte neprázdnou posloupnost celých nenulových čísel ukončenou číslem nula" ???
Takže zadávání skončí až zadáš nulu.
máš pravdu, ještě jednu radu, na konci musím napsat ReadLn, aby mi výsledek zůstal a hned nezmizl?
Jo, už mi to tam zůstává, takže takhle to má vypadat, ve výsledku to vypadá jednoduše, ale přijít na to je pro mě složité, každopádně děkuji za ochotu, a zítra se vrhnu na úkol č.2
úkol č.2:
program Project12;
{$APPTYPE CONSOLE}
var
c:Integer; { promenna pro cele cislo }
begin
write('Zadej cele cislo: '); { vypis textu na obrazovku }
readln(c); { cteni cisla z klavesnice, zadane cislo se ulozi do promenne c }
writeln('Bylo zadano cislo:',c); { kontrolni vypis zadaneho cisla }
begin
If c=0 Then { zkoumani, jestli je zadane cislo ulozene v promenne c nulove}
WriteLn('Ano, cislo je nula');
end;
{ TODO -oUser -cConsole Main : Insert code here }
ReadLn
end.
#47 Petr Jureček
Čteš vůbec ta zadání? Dokonce jsem ti do toho připraveného programu napsal do poznámky co to má dělat a ty toho uděláš jen půl.
Doplň co chybí.
{ zkoumani, jestli je zadane cislo ulozene v promenne c nulove
vypiš buď text "zadané číslo je nulové" nebo "zadané číslo není nulové" }
program Project12;
{$APPTYPE CONSOLE}
var
c:Integer; { promenna pro cele cislo }
begin
write('Zadej cele cislo: '); { vypis textu na obrazovku }
readln(c); { cteni cisla z klavesnice, zadane cislo se ulozi do promenne c }
writeln('Bylo zadano cislo:',c); { kontrolni vypis zadaneho cisla }
begin
If c=0 Then
WriteLn('Ano, cislo je nula');
end;
begin
If c>0 Then
WriteLn('Cislo neni nula');
end;
{ zkoumani, jestli je zadane cislo ulozene v promenne c nulove
vypiš buď text "zadané číslo je nulové" nebo "zadané číslo není nulové" }
{ TODO -oUser -cConsole Main : Insert code here }
ReadLn
end.
#49 Petr Jureček
Nemáš to dobře, záporné hodnoty jsou přece také celá čísla. D těmi beginy a endy tolik neplýtvej, dávej je jen tam, kde budou ohraničovat víc jak jeden příkaz uvnitř jiného příkazu.
Správně to mohlo být třeba takto (podobně jako u výpisu té klesající posloupnosti):
writeln('Bylo zadano cislo:',c); { kontrolni vypis zadaneho cisla }
If c=0
Then WriteLn('Ano, cislo je nula')
Else WriteLn('Cislo neni nula');
ReadLn;
Ok, to teda mám:
program Project12;
{$APPTYPE CONSOLE}
var
c:Integer; { promenna pro cele cislo }
begin
write('Zadej cele cislo: '); { vypis textu na obrazovku }
readln(c); { cteni cisla z klavesnice, zadane cislo se ulozi do promenne c }
writeln('Bylo zadano cislo:',c); { kontrolni vypis zadaneho cisla }
If c=0 Then
WriteLn('Ano, cislo je nula')
Else
WriteLn('Cislo neni nula');
{ zkoumani, jestli je zadane cislo ulozene v promenne c nulove
{ TODO -oUser -cConsole Main : Insert code here }
ReadLn
end.
Chci se zeptat, ten program můžu měnit nebo jenom doplňovat nové věci do toho? Tady bych to c dal If c<0 Then atd
Ještě se chci zeptat zpátky k tomu programu, my jsme ve škole ještě nedělali boolean, jak bych to měl profesorce vysvětlit? Vím, že to je logická proměnná, která se používá při těchto typech př, kde se musí rozhodnout ano, ne.
Jako takhle:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
c1,c2,klesajici:Integer;
begin
klesajici:=1; { nastav klesající jako pravda }
write('Zadej cislo:');
readln(c1); { přečti první číslo }
write('Zadej cislo:');
readln(c2); { přečti další (druhé) číslo }
While c2 <> 0 do { dokud další číslo není nula opakuj }
begin
If c2 >= c1 Then
klesajici:=0;
{ jestli další číslo není menší než předchozí tak nastav klesající jako nepravda }
c1:=c2; { ulož další číslo jako nové předchozí }
write('Zadej cislo:');
readln(c2); { přečti další číslo }
end;
if klesajici { vypiš výsledek zkoumání} then
writeln ('Posloupnost je klesajici')
else
writeln ('Posloupnost neni klesajici');
{ TODO -oUser -cConsole Main : Insert code here }
ReadLn;
end.
u toho if klesajici then mi to vypíše, že to musí být boolean
Boolean chapu, ale nahradil jsem to Integer. Tak jak ji to mam vysvetlit, kdyz se me zepta, co to znamena?
Zasláno z mobilního telefonu.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku