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.
Fórum › Delphi
Pomoc s programem
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...
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;
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 ?
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.
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.
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;
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
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