Programování v Delphi
Programování v Delphi
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?
-
- nováček
- Příspěvky: 4
- Registrován: duben 08
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Programování v Delphi
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
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
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.
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
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
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
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.
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
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

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
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...
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?
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?
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti