Problem s for cyklem – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problem s for cyklem – Pascal – Fórum – Programujte.comProblem s for cyklem – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
zoufalec
~ Anonymní uživatel
11 příspěvků
9. 11. 2008   #1
-
0
-

Mam drobny problem potrebuju do programu vlozit cylus for tak by mi cyklil tak dlouho dokud nenarazi na posledni radek ale radku je n. tim myslim jako ze muzou bejt dva a nebo milion... zde dam jeste kod kde se vyskytnul muj problem....


program faktor;
var rozklad:string;
var n,jaky,cislo1,pocet,i:longint;

begin;

i:=1;
for pocet:=1 to 2E31 do begin {/!!!! <<---- zde je muj problem----- }
read(cislo1);

n:=2;
rozklad:='';
jaky:=0;

while cislo1<>1 do
begin
while ((cislo1 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo1:=cislo1 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;


end.

Nahlásit jako SPAM
IP: 94.112.65.–
Reklama
Reklama
KIIV+42
God of flame
10. 11. 2008   #2
-
0
-

na todle je lepsi repeat until... for je pro presne znamy pocet opakovani...

+ nejsem si jist jestli se 2E31 nebere trosku jinak nez myslis... je to
20 0000000000 0000000000 0000000000 = 2 * 10^31
nikoliv
2147483647 = 2^31 - 1

EDIT: ano.. jak zminil Mircosoft taky je to realne :D mi to nejak vypadlo pri psani... a for se nema rad s realnem..
to co davas do foru musi mit predchudce a nasledovnika.. tj ordinalni typ

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
10. 11. 2008   #3
-
0
-

To zoufalec : Pokud znáš počet opakování předtím než ten cyklus spustíš, není problém načíst číslo n (celočíselnou proměnnou) a pak udělat for-cyklus od 1 do n. Ale jestli se počet dozvíš až během cyklu, použij repeat, jak píše KIIV.
Pozor, že 2E31 je reálné číslo a to se na meze for-cyklu ani na řídicí proměnnou nedá použít v žádném případě.

- V tom programu mi celý řádek s forem připadá, jako kdyby tam vůbec nepatřil - jednak pro něj nevidím žádný smysl a jednak je za nim begin, ke kterému už tam není ukončovací end.
- Proměnná jaky je k ničemu.
- Podmínka while ((cislo1 mod n)=0) mi připadá chybná, dal bych tam naopak while ((cislo1 mod n)<>0) (cislo1 chceš dělit číslem n, dokud to jde, ne dokud to nejde).

Nahlásit jako SPAM
IP: 147.32.161.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
zoufalec
~ Anonymní uživatel
11 příspěvků
10. 11. 2008   #4
-
0
-

ten algoritmus funguje spravne ...... uz to mam vyzkouseny.......

ale repeat until taky musim dopredu vedet kolik budu mit radku na vstupu....

btw ten kod sem malinko zmenil ale ted to nacte vsechny cisla v radku a udela to jejich faktorizaci coz je pro me spatne
ja potrebuju kdyz dostanu na vstupu

10
6
100
abych dostal na vystupu
2 5
2 3
2 2 5 5

radek muzu dostat jeden a nebo treba 1000 proste nahodne bez varovani

tady je poopraveny kod..... s pouzitim while....

program roznasouprv;
var rozklad:string;
n,jaky,cislo1,pocet,i:longint;

begin;
while not eoln do
begin
i:=1;
read(cislo1);
n:=2;
rozklad:='';
jaky:=0;
while cislo1<>1 do
begin
while ((cislo1 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo1:=cislo1 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;
end;
end.


diky predem za pomoc ...... pripadne o vysvetleni logickeho postupu jak uvazovat v takovych to pripadech....


Nahlásit jako SPAM
IP: 195.113.21.–
Mircosoft+1
Věrný člen
10. 11. 2008   #5
-
0
-

Moment... vstupní čísla čteš z klávesnice nebo ze souboru? V případě klávesnice by ukončovací podmínka mohla být nějaká speciální hodnota (např. nula), kterou zadá uživatel. V případě souboru to řeší funkce Eof (ne Eoln).

Repeat a While se ukončuje logickou podmínkou, takže počet opakování znát nepotřebuješ. Prostě skončíš, až ta podmínka bude splněna.

P.S.: možná by ti mohlo pomoci tohle: http://mircosoft.ic.cz/download/prvocisla.zip

Nahlásit jako SPAM
IP: 89.176.249.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
zoufalec
~ Anonymní uživatel
11 příspěvků
11. 11. 2008   #6
-
0
-

mno teoreticky klavesnici ale nemam uplne predstavu vyhodnocuje to skolni system....... a tak jsem to zkusil eof a to mi nevzal.... tak opravduu uz nevim prej programovani pro zavatecniky 1 :D mam co delat abych tyden po prednasce a cviku pochopil jak ty veci pracujou..... takze je to pro me trosku problem.....

Nahlásit jako SPAM
IP: 94.112.65.–
zoufalec
~ Anonymní uživatel
11 příspěvků
11. 11. 2008   #7
-
0
-

jeste drobnost kdyz jsem tam napsal na tvrdo todle tak jsem dostal 10% spravne ..... tak teoreticky bych to musel udelat s ohromnym mnozstvim for cyklu s podminkama tak aby si to nejak zjistilo kolik radku je na vstupu ...... ale mam takovej dojem ze bych u toho zestarnul......
program roznasouprv;
var rozklad:string;
var n,jaky,cislo1,cislo2,cislo3,cislo4,i:longint;

begin;

i:=1;
read(cislo1);
read(cislo2);
read(cislo3);
read(cislo4);
n:=2;
rozklad:='';
jaky:=0;

while cislo1<>1 do
begin
while ((cislo1 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo1:=cislo1 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;
n:=2;
rozklad:='';
jaky:=0;

while cislo2<>1 do
begin
while ((cislo2 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo2:=cislo2 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;
n:=2;
rozklad:='';
jaky:=0;

while cislo3<>1 do
begin
while ((cislo3 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo3:=cislo3 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;
n:=2;
rozklad:='';
jaky:=0;

while cislo4<>1 do
begin
while ((cislo4 mod n)=0) do
begin
if not(i=1) then write(' ');
i:=i+1;
cislo4:=cislo4 div n;
write(n,'');
end;
n:=n+1;
end;
writeln;


end.

takhle to poroslo alespon prvnim testem a dalo mi to tech 10% ale dle me jen pro to ze sem trefil prvni zkoumany pocet ostatni testy mi vyhodily wrong answer......

Nahlásit jako SPAM
IP: 94.112.65.–
Mircosoft+1
Věrný člen
11. 11. 2008   #8
-
0
-

Sákryš, tak se známkovacím robotem jsem se ještě nesetkal :-O.
Ten vnější cyklus bych viděl nějak takhle:

var cislo:longint;

...
writeln('Zadavej cisla. Zadanim nuly se skonci.');
repeat
readln(cislo);
if cislo<>0 then ...zpracuj ho...
until cislo=0;
...
Prostě budeš načítat a zpracovávat čísla tak dlouho, dokud bude uživatele bavit je psát.

Nahlásit jako SPAM
IP: 147.32.161.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
11. 11. 2008   #9
-
0
-

Nebo moje oblíbená prasárnička:

var cislo:longint;

...
writeln('Zadavej cisla. Zadanim nuly se skonci.');
repeat
readln(cislo);
if cislo=0 then Break;
{...zpracuj ho...}
until 1=2;
...

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
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, 23 hostů

Moderátoři diskuze

 

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