Stránka 1 z 1
Programování v Delphi
Napsal: 22 dub 2008 18:47
od gokralik
Zdař bůh. Mám vytvořit v Delphi algoritmus "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í)." pomocí cyklů a vůbec nevím jak na to. Pomohl by někdo?
Re: Programování v Delphi
Napsal: 22 dub 2008 19:01
od zlatovlaska
gokralik píše:Zdař bůh. Mám vytvořit v Delphi algoritmus "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í)." pomocí cyklů a vůbec nevím jak na to. Pomohl by někdo?
bude záležet na tom, kolik tam navolíš maximální počet čísel... podle mě to funguje takzvaným "probubláním polem"
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;
snad ti to k něčemu bude... kdyžtak mě programátoři opravte

Re: Programování v Delphi
Napsal: 22 dub 2008 19:30
od gokralik
Spíš nevím, jak tam napsat aby se cyklus přestal opakovat, když dojde k té nule na konci. Já vlastně nevím vůbec nic

Re: Programování v Delphi
Napsal: 22 dub 2008 19:37
od paul27
Zlatovlaska má pravdu. Snad jen trochu doplním.
Tz. probubláváním neboli bublinkovým řazením (a já nevim, jak se tomu ještě říká) se dá seřadit pole, do kterýho si nejdřív načteš/vygeneruješ čísla.
Ovšem pozor tím bublinkovým řazením sice docílíš toho, že se ti sousední dvě čísla prohoděj (nebo ne, když nesplňujou podmínku), ale když máš na posledním místě v poli (pole s posledním indexem) největší číslo (mělo by být první), tak se tím scriptem od zlatovlasky na první místo nedostane (jen na předposlední) => je potřeba ještě jeden cyklus "pro zajitění přerovnání".
Taky bych řekl, že srovnání "další číslo vždy menší než předchozí" by mělo být v té podmínce opačné znaménko nerovnosti než má zlatovlaska.
Jinak v Delphi nedělám, takže přesně ti to nenapíšu, neznám tu syntaxi.
Re: Programování v Delphi
Napsal: 22 dub 2008 19:43
od paul27
gokralik píše:Spíš nevím, jak tam napsat aby se cyklus přestal opakovat, když dojde k té nule na konci. Já vlastně nevím vůbec nic

for I:=1; I<20;I++//jestli to je přesně podle syntaxe Delphi nevím, ale na vysvětlení stačí
příkazy;
end;
Na začátku je v proměnné I=0 - jede cyklus a po každém projetí se číslo v proměnné I zvýší o 1 (viz. I++) a jde to do tý doby, do kdy bude I<20.
Jinak násilné ukončení cyklu je příkaz "break;".
Re: Programování v Delphi
Napsal: 22 dub 2008 19:44
od gokralik
No počkat počkat...ale ta posloupnost se nebude měnit...ten program má jenom rozhodnout jestil je nebo není klesající....
Re: Programování v Delphi
Napsal: 22 dub 2008 19:52
od paul27
Jj, tak to jsme odpovídali na něco jinýho, no tak aspoň umíš seřazení.
Takže načtení do pole zůstává a pak budeš kontrolovat pole[i] s pole[i+1] - dvě sousední čísla(cyklus) a když (podmínka) bude menší pole[i+1] něco vypíšeš (nebo někam započítáš a vypíšeš až na konci, kolik dvojic bylo klesajících a kolik stoupajících), když naopak, tak zase podmínka, názorně asi takhle:
for I:=1 to N-1 do
if A[I]>A[I+1] then begin//když pole A[I] větší než A[I+1]
//něco uděláš
elseA[I]<A[I+1] then begin//když opačně
//něco uděláš
end;
\\EDIT: Kdyby si chtěla, tak můžu posloužit třeba v C#, C++, PHP, Python, bohužel Delphi nedávám.
Re: Programování v Delphi
Napsal: 22 dub 2008 19:57
od gokralik
Já jsem kluk!

zatím díky...zkusím se s tím poprat. Kdyžtak se zase zeptám.
Re: Programování v Delphi
Napsal: 22 dub 2008 21:21
od paul27

Ježiš sorry, já já dneska nějak nevim co plácám.
Se kdyžtak ptej, možná se tu najde někdo, kdo Delphi umí a napíše ti to.
\\EDIT: Celkem to budou dva cykly a jedna podmínka v tom druhém cyklu. Ještě možná upřesni, co chceš dělat, když zjistíš, že daný dvojice čísel je např. rostoucí.
Re: Programování v Delphi
Napsal: 10 čer 2010 14:13
od gokralik
Zdravím lidi. Tak bohužel s tím pořád ještě ve škole bojuju a ač se to už mnohem zlepšilo, mám pořád nevyřešitelný problém. Tím je jedna procedura. Těm už normálně začínám rozumět, ale nechápu, proč v tomto případě nechce fungovat potvora...
Kód: Vybrat vše
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.
Tak například tady všechno funguje tak jak má. Mám prostě seřadit posloupnost od nejmenšího čísla po největšího a k němu jeho index (předchozí polohu) tak, že program vypíše nejmenší číslo a ze zbytku opět nejmenší atd. To mám přímo v zadání, na tom už nebudu nic měnit. Ale kdybych chtěl tu část, kde zadávám čísla přesunout mimo proceduru, automaticky mi přestane fungovat a místo seřazených čísel jsou tam nějaká hausnumera a jako indexy nějaké nesmysly.
Nenapadá vás, kde dělám chybu? Vždyť když si vytvořím nějakou jednoduchou proceduru, tak všechno funguje jak má a čísla můžu zadávat až potom...jen tady to nějak nejde... Už si s tím lámu hlavu asi tři měsíce, do toho se mi pletou všechny ostatní zkoušky a zápočty a termín na odevzdání se blíží. Pomůže někdo?