Programování v Delphi

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

gokralik
nováček
Příspěvky: 5
Registrován: duben 08
Pohlaví: Muž
Stav:
Offline
Kontakt:

Programování v Delphi

Příspěvekod gokralik » 22 dub 2008 18:47

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?

Reklama
zlatovlaska
nováček
Příspěvky: 4
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline
Kontakt:

Re: Programování v Delphi

Příspěvekod zlatovlaska » 22 dub 2008 19:01

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 ;-)

gokralik
nováček
Příspěvky: 5
Registrován: duben 08
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Programování v Delphi

Příspěvekod gokralik » 22 dub 2008 19:30

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 :huh:

paul27
Level 4.5
Level 4.5
Příspěvky: 1700
Registrován: červen 07
Pohlaví: Muž
Stav:
Offline

Re: Programování v Delphi

Příspěvekod paul27 » 22 dub 2008 19:37

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.

paul27
Level 4.5
Level 4.5
Příspěvky: 1700
Registrován: červen 07
Pohlaví: Muž
Stav:
Offline

Re: Programování v Delphi

Příspěvekod paul27 » 22 dub 2008 19:43

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 :huh:


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;".

gokralik
nováček
Příspěvky: 5
Registrován: duben 08
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Programování v Delphi

Příspěvekod gokralik » 22 dub 2008 19:44

No počkat počkat...ale ta posloupnost se nebude měnit...ten program má jenom rozhodnout jestil je nebo není klesající....

paul27
Level 4.5
Level 4.5
Příspěvky: 1700
Registrován: červen 07
Pohlaví: Muž
Stav:
Offline

Re: Programování v Delphi

Příspěvekod paul27 » 22 dub 2008 19:52

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.

gokralik
nováček
Příspěvky: 5
Registrován: duben 08
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Programování v Delphi

Příspěvekod gokralik » 22 dub 2008 19:57

Já jsem kluk! :D zatím díky...zkusím se s tím poprat. Kdyžtak se zase zeptám.

paul27
Level 4.5
Level 4.5
Příspěvky: 1700
Registrován: červen 07
Pohlaví: Muž
Stav:
Offline

Re: Programování v Delphi

Příspěvekod paul27 » 22 dub 2008 21:21

:lol: 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í.

gokralik
nováček
Příspěvky: 5
Registrován: duben 08
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Programování v Delphi

Příspěvekod gokralik » 10 čer 2010 14:13

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?


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 5 hostů