Pomoc s programem – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s programem – Delphi – Fórum – Programujte.comPomoc s programem – Delphi – Fórum – Programujte.com

 

Janička
~ Anonymní uživatel
10 příspěvků
13. 5. 2009   #1
-
0
-

Ahoj, mám následující zadání:

Napište program který:

1. Naplní pole délky 9 náhodnými sudými čísly z intervalu 0-8.
2. Pole vypíše na obrazovku na jeden řádek, prvky oddělí mezerou.
3. Na nový řádek vypíše indexy prvků pole oddělené mezerou v pořadí, které je dáno
vzestupným uspořádáním hodnot pole.


Tady mám bod 1. a 2., ale s 3. si nevím rady, pomůže někdo ?

uses
SysUtils;
var p:array[1..9] of integer;
i,j,k : integer;

begin
randomize;
for i:= 1 to 9 do
p[i]:=random (5)*2;

for i:= 1 to 9 do
write (p[i],' ');
readln;
end.






Nahlásit jako SPAM
IP: 213.192.8.–
joudicek0
Návštěvník
14. 5. 2009   #2
-
0
-

To Janička :

Ja bych to zkusil takhle:




uses
SysUtils;

var p:array[1..9] of integer;
i,j,k, pom : integer;

begin
randomize;
for i:= 1 to 9 do
p[i]:=random (5)*2;

for i:= 1 to 9 do
write (p[i],' ');

Writeln;
pom := 0;
while pom <= 8 do {pro cisla 0 - 8}
begin
for i: = 1 to 9 do {je cislo ulozene v pom v poli ?}
begin
if p[i] = pom then
begin
Write(i,' ');
end;
end;

pom := pom + 2; {pouze suda cisla}
end;

readln;
end.


Snad v tom nejsou chyby...

Nahlásit jako SPAM
IP: 212.20.106.–
Honzc0
Stálý člen
14. 5. 2009   #3
-
0
-

k bodu 3.
sekci var upravit následovně

var p,v:array[1..9] of Integer;
i,j,minc : Integer;

a pak před readln přidat:

WriteLn;
for j := 1 to 9 do //9x projdeme pole a hledame minimalni cislo,
begin //ktere ulozime do promene minc
minc := 10; //pocatecni hodnota na zacatku kazdeho pruchodu
for i := 1 to 9 do //musi byt vetsi nebo rovna max. cislu v poli
if p[i]<minc then //kdyz prvek v poli je mensi nez dosud nalezeny
begin
minc := p[i]; //tak ho zapiseme jako minimalni
v[j] := i; //a do vysledku na pozici pruchodu zapiseme jeho poradi
end;
p[v[j]] := 10; //aby se nam nepletl (abychom ho pri dalsim
end; //pruchodu zase nevybrali),tak mu priradime 10
WriteLn;
WriteLn(' Indexy prvku pole serazeneho vzestupne');
for i := 1 to 9 do //vypis vysledneho pole s jednou mezerou
Write(v[i]:2);
WriteLn;

Nahlásit jako SPAM
IP: 85.207.57.–
joudicek0
Návštěvník
14. 5. 2009   #4
-
0
-

To Honzc : Skoro jako jit s tankem na komara :)

Nahlásit jako SPAM
IP: 212.20.106.–
Honzc0
Stálý člen
14. 5. 2009   #5
-
0
-

To joudicek
Pro tento konkretní případ je to moje řešení složitější (větší počet průchodů), ale představ si, že ta čísla
nebudou jenom sudá a do 8, ale libovolná a nejenom třeba Integer.
Tak potom by tvůj postup nefungoval.

Nahlásit jako SPAM
IP: 85.207.57.–
joudicek0
Návštěvník
14. 5. 2009   #6
-
0
-

To Honzc : To nepopiram...... ale v ramci zavaznosti problemu... :)

Nahlásit jako SPAM
IP: 212.20.106.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #7
-
0
-

Moc dík, kluci jste fajn...............

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #8
-
0
-

Díky Honzc fakt za pomoc, akorát to nefunguje 100%. :-((

Třeba pole 4 8 4 8 6 0 6 2 8 jeho indexy seřadí takto
6 8 1 3 5 7 2 4 9

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #9
-
0
-

Pardon, moc se Houzcovi omlouvám , měla jsem chybu v překladači, snad mě to odpustí. :-))

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #10
-
0
-

Děkuji i joudickovi za velkou pomoc.

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #11
-
0
-

Vysvětlíte mě i toto ?


for j := 1 to 9 do //9x projdeme pole a hledame minimalni cislo,
begin //ktere ulozime do promene minc
minc := 10; //pocatecni hodnota na zacatku kazdeho pruchodu
for i := 1 to 9 do //musi byt vetsi nebo rovna max. cislu v poli
if p[i]<minc then //kdyz prvek v poli je mensi nez dosud nalezeny

Moc to nechápu, mám teda pole p s indexem jako i.
Ale tady už je nějaký cyklus - for j := 1 to 9 do pro j, to j je kde, nebo co je to ?

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #12
-
0
-

Myslela jsem, že j se používá jen v maticích, jako sloupec, ale tady je použit i v poli, absolutně to nechápu. :-((((

Nahlásit jako SPAM
IP: 213.192.8.–
joudicek0
Návštěvník
14. 5. 2009   #13
-
0
-

j je obycejna promenna stejne jako i nebo minc. Kdyz uz si zacala o maticich, tak matice je vlastne taky jenom pole... Nevim, co je na tom dal k vysvetlovani, tak se kdyztak ptej :)

Nahlásit jako SPAM
IP: 212.20.106.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #14
-
0
-

Třeba když mám to pole p o devíti prvcích tak i definuje jednotlivý pozice ? Je to pravda ?

Nevím co je to j, co znamená jestli jsou to indexy pole v ??

Nahlásit jako SPAM
IP: 213.192.8.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #15
-
0
-

Nebo takhle k čemu je ta proměnná j dobrá k čemu slouží ? Proč si nejde vystačit jenom s i.

Nahlásit jako SPAM
IP: 213.192.8.–
joudicek0
Návštěvník
14. 5. 2009   #16
-
0
-

To Janička : Mas v tom trochu bordylek :) Promenna i je promenna jako kazda jina, je to jen indentifikator nejakeho mista v pameti. Jak velke to misto bude, zalezi na typu promenne. Muzes mit promenne typu integer, float, double, string, nebo vlastnich typu....

pole je vlastne taky jen typ promenne a v tvem pripade rika, ze ty prvky pole budou cela cisla -> integer. Pro pole plati, ze jeho prvky jsou v pameti umisteny za sebou, proto maji jiste poradi, cehoz se vyuziva ve zpusobu pristupu k nim...

V programovani existuji jista pravidla a doporuceni, at jiz psana nebo nepsana... Jednim z nich je i nazvoslovi promennych u cyklu for.
V 90 procentech pripadu se pouziva prave pismeno i, pokud je jiz obsazeno, tak pak j,k .... Ale je to jen formalita, nevim, jestli je to nekde napsane, nebo jen sila zvyku.... klidne muzes promennou i v cyklu for prejmenovat na index, kolo, sluchatko...na identifikatoru nezalezi...



for j := 1 to 9 do //9x projdeme pole a hledame minimalni cislo,
begin //ktere ulozime do promene minc
minc := 10; //pocatecni hodnota na zacatku kazdeho pruchodu
for i := 1 to 9 do //musi byt vetsi nebo rovna max. cislu v poli
if p[i]<minc then //kdyz prvek v poli je mensi nez dosud nalezeny
begin
minc := p[i]; //tak ho zapiseme jako minimalni
v[j] := i; //a do vysledku na pozici pruchodu zapiseme jeho poradi
end;
p[v[j]] := 10; //aby se nam nepletl (abychom ho pri dalsim
end;


V teto casti programu by sis mozna s jednim cyklem vystacila, ale bylo by to asi pametove narocne a hodne neprehledne.

Nahlásit jako SPAM
IP: 212.20.106.–
Janička
~ Anonymní uživatel
10 příspěvků
14. 5. 2009   #17
-
0
-

joudicek díky snažím se to pochopit ze všech sil, ale asi je to marné :-(((.


Třeba když mám teda pole,

p:array[1..16] of integer ; vyplním ho náhodnými čísly

a provedu bubble sort;

for i:=1 to 15 do
for j:=1 to 16-i do
if p[j]>p[j+1] then
begin
pom:=p[j];
p[j]:=p[j+1];
p[j+1]:=pom;
end;

i mě prochází polem od 1 do 15
jakto že v bublinovce je zase j, kde jsou přiřazený hodnoty j:=i.
nebo jak to ví že j:=i.

Nahlásit jako SPAM
IP: 213.192.8.–
joudicek0
Návštěvník
14. 5. 2009   #18
-
0
-

To Janička : Nejak jsem nepobral ten vrchni dotaz, kazdopadne ten vrchni bubble sort by sel udelat jinak a myslim ze lip...ale to ted asi neni predmetem. Jestli tomu dobre rozumim, tak nechapes jak funguje pole.....




var i,j :integer;0
pole:array[1..10] of integer;

begin

for i:= 1 to 10 do {projde 10 prvku pole a kazdemu priradi nahodne cislo...}
begin
pole[i] := random(10);
end;

j := 11;
for i := 1 to 10 do
begin
{vypise nejprve hodnotu i a pak prvek v poli na pozici i}
Write('Prvek ');Write(i);Write(' = ');Writeln(pole[i]);

{vypise pozici j-i (v prvnim pruchodu 11-1 = 10) a
pak prvek na teto pozici, tzn v prvnim pruchodu na pozici 10}

Write('Prvek ');Write(j-i);Write(' = ');Writeln(pole[j-i]);
end;
end;

Nahlásit jako SPAM
IP: 212.20.106.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Pomoc s programem — založil Pepuna

Pomoc s programem C++ — založil Marek

Pomoc s programem — založil undatra

Pomoc s programem — založil Zugi

Pomoc s programem — založil Jarda

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý