Prvočísla -Pascal – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Prvočísla -Pascal – Pascal – Fórum – Programujte.comPrvočísla -Pascal – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
El97za0
Duch
6. 12. 2015   #1
-
0
-

Zdravím,

potřebovala bych poradit s programem,který vypíše prvních n-prvočísel (počet zadá uživatel). Něco už jsem zkoušela,ale pořád mě to hází nějaké chyby. Nejspíš tam mám někde problém s tím "mod" (nevím jak ho přesně použít).

Díky za radu .

program prvocisla;
var t: boolean;
    pocet,i,j, pp:longint;
    cislo:real;
    a,c: array[1..30000] of real;
begin
        writeln('Zadejte pocet prvocisel, ktera chcete zobrazit');
        readln(pocet);
begin
     i:=0; pp:=0;
        repeat i:=i+1;
             begin j:=0;
                for j:=1 to round(Sqrt(a[i])) do
                        begin t:=true;


                                if a[i] DIV c[j]:= cislo  mod 0 then t:=false

                        end;
                        begin pp:=0;
                                if t=true then  pp:=pp+1; writeln(a[i]);

                        end;
             end;
        until pp=pocet;

end;

end.

Nahlásit jako SPAM
IP: 194.228.68.–
Reklama
Reklama
KIIV+42
God of flame
6. 12. 2015   #2
-
0
-

celej ten if je zmrsenej.. Vydelis nejaky cisla necim a pak do toho jeste zkousis priradit vysledek zbytku po deleni? Krom toho ze ty hodnoty nejsou ani inicializovany.

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JoDiK
~ Anonymní uživatel
981 příspěvků
7. 12. 2015   #3
-
0
-

#1 El97za

 

Podle mě nemáš problém s modem, ale s tím, co chceš spočítat a jak toho chceš dosáhnout...

Zkus to po menších kouscích.

To ovšem předpokládá, že se to chceš naučit a ne jen odevzdat domácí úkol...

Párkrát už jsem někomu zkoušel něco vysvětlit přes tento server, to ale moc nefunguje, tak doporučuju ukecat kamaráda (spolužáka), ať ti s tím pomůže.

PS: Když jsem na to jen zlehka nakoukl, tak špatně je tam snad všechno. Například základní nesmysl - mod je zbytek po dělení celých čísel. Ty se ho pokoušíš aplikovat na reálná čísla.

Další nesmysl - asi jsi zamýšlela v nějakém poli 30000 čísel prozkoumat a zapsat, které z nich je prvočíslem a které ne. Nebylo by jednodušší si do nějakého pole ukládat jenom ta prvočísla, pokud vůbec je potřeba je ukládat (když podle zadání se mají jen vypsat)...

Nahlásit jako SPAM
IP: 88.103.236.–
JoDiK
~ Anonymní uživatel
981 příspěvků
7. 12. 2015   #4
-
0
-

#1 El97za
A kdybys náhodou sem ještě nakoukla, tak abys porozumněla, co myslím těma menšíma kouskama:

1. načti jedno číslo a zjisti, jestli je dělitelné třemi. (například uživatel zadá 47, program vypíše 47 není dělitelné třemi, uživatel zadá 48, program vypíše 48 je dělitené třemi).

2. načti jedno číslo a zjisti čím vším je dělitelné (například uživatel zadá 28 a program vypíše 1, 2, 4, 7, 14, 28 nebo zadá 31 a program vypíše 1, 31)

3. načti jedno číslo a vypiš jestli je to prvočíslo (například uživatel zadá 28 a program vypíše 28 není prvočíslo a nebo zadá 31 a program vypíše 31 je prvočíslo)

3. no a pak načti jedno číslo a vypiš seznam prvočísel od 1 do zadaného čísla (například uživatel zadá 40 a program vypíše 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37)

PS:

nápověda:

x := 47 mod 3; {v proměnné x bude zbytek po dělení třemi nebo-li 2}

x := 48 mod 3; {v proměnné x bude zbytek po dělení třemi nebo-li 0}

Nahlásit jako SPAM
IP: 88.103.236.–
El97za0
Duch
7. 12. 2015   #5
-
0
-

#4 JoDiK
Děkuju za radu. No akorát,že on má uživatel vypsat kolik těch prvočísel chce vypsat (ne,že napíše nějaké číslo a ty mu odpovíš,jestli to je nebo není prvočíslo).

Takže by  to mělo fungovat asi takto nějak:

1. Uživatel napíše kolik těch čísel teda chce(např. 6).

A ty pak hledáš prvních šest prvočísla (tj.1,2,3,5,7,11).

No já sem myslela,že ve vnějším cyklu se bude zvyšovat číslo(začne na 1), a ve vnitřním cyklu se bude zvyšovat číslo,kterým budeš dělit to první číslo. Pak vydělíš první číslo druhým. A když ti vyjde zbytek 0,tak to není prvočíslo.. No ale nevím jak mám zjistit,kdy je ten zbytek 0 a kdy ne..

A není to o tom,že bych chtěla tu úlohu odevzat (to ani nemusíme) spíš bych to na tom chtěla zkusit...

Ale jinak díky za radu :)

Nahlásit jako SPAM
IP: 194.228.68.–
JoDiK
~ Anonymní uživatel
981 příspěvků
7. 12. 2015   #6
-
0
-

#5 El97za
Nepochopilas...

Neřeš co má nebo nemá ten tvůj program dělat a nejdřív se na jednodušších úkolech nauč používat prostředky, které ti Pascal nabízí. Těžko postavíš dům, když neumíš pokládat cihly...

"nevím jak mám zjistit,kdy je ten zbytek 0 a kdy ne." to jsem ti přece psal v nápovědě!

PS: ano, špatně jsem pochopil to zadání, ale ten rozdíl je minimální, tak se místo hledání do zadaného čísla prostě bude počítat, kolik prvočísel se už vypsalo a skončí se u stanoveného počtu...

Nahlásit jako SPAM
IP: 88.103.228.–
peter
~ Anonymní uživatel
2551 příspěvků
8. 12. 2015   #7
-
0
-

Prvocislo je cislo, ktere je celociselne delitelne 1 a sebou samym.
- je cel. delitelne 1?
- je cel. delitelne sebou samym? (0 neni prvocislo)
1. Cili, melo by se nejdriv zkontrolovat, zda je to cele cislo, zda je to >0, zda je to 1 nebo 2.
2. Pokud je >2, pak je treba cyklem zkouset celociselne delit a kotrolovat to s nulou.
bool = false;
cyklus (i=2; i<cislo; i++)
if (cislo%i==0) {bool = true; break;} // v pascalu asi mod
if (bool==true) 'Neni prvocislo'

Mno, a pokud chces kontrolovat kazde cislo od 1 do n, tak dalsi cyklus.
cyklus (cislo=1; cislo<n; cislo++)

% zbytek po celociselnem deleni, cili 5/2 je 5-2-2 = 1, 43/6 = 45-6-6-6-6-6-6-6 = 3 (cyklus odcitani, dokud je cislo vysledku vetsi nez cislo, kterym delis)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:e0f1:95...–
KIIV+42
God of flame
8. 12. 2015   #8
-
0
-

#7 peter
jen pro upresneni - 1 neni prvocislo

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
8. 12. 2015   #9
-
0
-

#5 El97za
Doporučil bych začít napsáním funkce, které předhodíš číslo a ona ti řekne, jestli je prvočíslo nebo ne. Tedy:

function JePrvocislo(cislo:integer):boolean;

Tím se úloha rozdělí na dva nezávislé menší úkoly: tuhle funkci a cyklus, ve kterém nějaké číslo postupně zvyšuješ o 1, testuješ prvočíselnost (zavoláním téhle funkce) a počítáš, kolik prvočísel už jsi našla.

Prográmek na to mám už nějakou dobu hotový, takže stačí zapátrat. Ale vlastní snaha se samozřejmě cení víc.

Nahlásit jako SPAM
IP: 212.79.106.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
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, 8 hostů

Podobná vlákna

Prvocisla — založil myky

Hledani prvocisla — založil loleklel

Prvocisla v intervalu — založil zemlra

Pomoc prvočísla nutně — založil Pavel

Program pro prvočísla — založil Daniel

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ý