pascal ulohy (pomoc)

Programovacie jazyky, rady, poradňa...
ef.K0
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 811
Registrovaný: 18 jan 2005, 20:53
Bydlisko: DT

pascal ulohy (pomoc)

Príspevok od používateľa ef.K0 »

Ma niekto tieto programy v pascale urobene a napisal by sem zdrojaky, alebo ak nie, tak by ste mi mohli pomoct aspon s tymi ktore viete, dakujem vopred...

--Vytvorte podprogram pre výpis Pascalovho trojuholníka až do rádu n. Poznámka: Pascalov trojuholník pozostáva z kombinačných čísel
--Zostavte podprogram na výpočet najmenšieho spoločného násobku dvoch čísel.
--Zostavte podprogram na krátenie zlomkov, v riešení využite procedúru NSD.
--Zostavte podprogram na výpočet súčtu cifier na párnych pozíciách od najnižších rádov.
--Vytvorte podprogram, ktorý rozhodne o celom čísle , či je dokonalé. Poznámka: ( Číslo je dokonalé , ak sa rovná súčtu svojich deliteľov okrem seba samého.)
--Zostavte podprogram, ktorý zistí, či cifra K sa nachádza v zápise čísla N.
--Zostavte podprogram, ktorý zistí, či dané číslo sa rovná druhej mocnine svojho ciferného súčtu.
--Vytvorte podprogram, ktorá prevedie prirodzené číslo z dvojkovej pozičnej sústavy do desiatkovej .
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

NSD:
program najvacsi_spolocny_delitel; {16}
uses crt;
var M,N,i:integer;

function JEDEL(a,b:integer):boolean;
begin
if (a mod b)=0 then jedel:=true
else jedel:=false;
end;

function MAX(a,b:integer):integer;
begin
if a>b then MAX:=a
else MAX:=b;
end;

function SPOLDEL(a,b,x:integer):boolean;
begin
if ((a mod x)=0)and ((b mod x)=0)then SPOLDEL:=true
else SPOLDEL:=false;
end;

function NSD(a,b:integer):integer;
var x:integer;
begin
for i:=1 to MAX(a,b) do
begin
if SPOLDEL(a,b,i) then x:=i;
end;
NSD:=x;

end;


BEGIN
clrscr;
writeln('Zadaj 2 cisla, ktorych NSD chces vypocitat:');
readln(M,N);

writeln('Delitele cisla M=',M);
for i:=1 to M do
if JEDEL(M,i) then write(i,',');
writeln;writeln;

writeln('Delitele cisla N=',N);
for i:=1 to N do
if JEDEL(N,i) then write(i,',');
writeln;writeln;

writeln('Spolocne delitele cisel M=',M,' a N=',N);
for i:=1 to MAX(M,N) do
if SPOLDEL(M,N,i) then write(i,',');
writeln;writeln;

writeln('Najvacsi spolocny delitel cisel je');
writeln(NSD(M,N));
readln;
END.
Mal by som mat niekde aj dalsie ulohy, ale komu sa chce hladat. Vsak? :roll:

Ale nie. Skus sa pozriet do temy v Programovani, kde som uploadol do prilohy moje zdrojaky programov v pascale. Mohol by som ti niektore programy spravit, ale to by si sa nic nenaucil. :) A navyse teraz nemam vobec casu sa babrat s pascalom. No a tie ulohy, ktore ti treba nie su vobec narocne, tak sa posnaz trosku. :wink:
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Príspevok od používateľa pheo »

Ak máš záujem o programy v Pascale celkom slušnú zbierku nájdeš na:
a nielen to :D
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Pascalov trojuholník:

Kód: Vybrať všetko

Program Trojuholnik;
const m=25;
var a: array[1..m, 0..m] of integer;
i, j, N, k, r: integer;
Begin
Write ('Zadaj N '); ReadLn (N);
for i:=1 to N do
begin
a[i,0]:=0; a[i,i+1]:=0;
end;
a[1,1]:=1; r:=40; {prvá hodnota r=40, stred riadku}
for k:=1 to r do Write (' '); {na obrazovke bude 40 medzier}
r:=r-2; {r sa znižuje o 2}
WriteLn (a[1,1]: 4);{zobrazenie prvého prvku v strede riadku}
for i:=2 to n do
begin
for k:=1 to r do Write (' '); {znižujúci sa počet medzier}
r:=r-2;
for j:=1 to i do
begin
a[i,j]:= a[i-1,j-1] + a[i-1,j];
Write(a[i,j]: 4);
end;
WriteLn;
end;
ReadLn; 
neppo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 774
Registrovaný: 09 jún 2005, 15:33

Príspevok od používateľa neppo »

btw trosku amaterska stranka ale robil som to narychlo a davno... pouzivame to v skole na informatike na nahravanie ulohy... skus si to pozret mozno si nieco najdes http://www.pascalgjk.tk :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ppt: načo tak zložito, euklidov algoritmus ti nič nehovorí?
NSD

Kód: Vybrať všetko

program NSD;
var NSD,a,b:integer;
begin
write ('Zadaj cislo a: ');
read (a);
write ('Zadaj cislo b: ');
read (b);
while a<>b do
   if a>b then a:=a-b
          else b:=b-a;
NSD:=a;
write (NSD);
read(b);
end;
postupne ti sem popridávam aj ostatné, sú to jednoduché úlohy..

//edit1:
nsn

Kód: Vybrať všetko

Program nsn;
var a,b,sucin:integer;
    nsn:extended;
begin
write ('Zadaj cislo a: ');
read (a);
write ('Zadaj cislo b: ');
read (b);
sucin:=a*b;
while a<>b do
   if a>b then a:=a-b
          else b:=b-a;

nsn:=sucin/a;
write ('nsn: ',nsn:8:0);
read(b);
end.
//edit2:
krátenie zlomku s využitím NSD:

Kód: Vybrať všetko

program kratenie;
function NSD(a,b:integer):integer;
 begin
 while a<>b do
   if a>b then a:=a-b
          else b:=b-a;
 nsd:=a;
 end;
var upravenycitatel,upravenymenovatel:extended;
a,b:integer;
begin
write ('Zadaj citatela: ');
read(a);
write ('Zadaj menovatela: ');
read(b);
upravenycitatel:=a/nsd(a,b);
upravenymenovatel:=b/nsd(a,b);
write('Upraveny zlomok je: ',upravenycitatel:0:0,'/',upravenymenovatel:0:0);
read(b);
end.
//edit3:
Súčet cifier na párnych pozíciach:

Kód: Vybrať všetko

program sucet;
var vysledok,cifra,i,kod:integer;
cislo:string;
begin
write ('Zadaj cislo: ');
read (cislo);
vysledok:=0;
for I:=length(cislo) downto 1 do if I mod 2 = 0 then begin
  val(cislo[i],cifra,kod);
  if kod=0 then vysledok:=vysledok+cifra else begin
    write('doslo k chybe');
    exit;
    end;

end;
write('sucet cifier na parnych poziciach je: ',vysledok);
read(kod);
end.
//edit4:
Dokonalé číslo:

Kód: Vybrať všetko

program Dokonale;
var
delitele,cislo,I:integer;
begin
delitele:=0;
write ('Zadaj cislo: ');
read (cislo);
For I:=1 to cislo-1 do if cislo mod I = 0 then delitele:=delitele+I;
if cislo mod delitele = 0 then write ('Cislo je dokonale') else write ('Cislo nieje dokonale');
read (delitele);
end.
//edit5:
Cifra v čísle:
Pozn: robil som to cez string: je to univerzálne aj pre reťazce a rýchlejšie ako keby mam izolovať cez mod a div každú cifu a porovnávať..

Kód: Vybrať všetko

program hladaj;
var hladam,retazec:string;
i:integer;
begin
write ('Zadaj cislo ktore sa ma prehladat: ');
readln (retazec);
write ('Zadaj hladanú cifru: ');
read (hladam);
if pos(hladam,retazec)>0 then write ('Cifra sa nachadza') else write ('Cifra sa nenachadza');
readln (I);
end.
//edit6:
Rovna sa čislo druhej mocnine cif. súčtu?:

Kód: Vybrať všetko

program omg;
var sucet,pom,cislo,i:integer;
begin
write ('Zadaj cislo: ');
read (cislo);
pom:=cislo;
sucet:=0;
while cislo>0 do begin
  sucet:=sucet+(cislo mod 10);
  cislo:=cislo div 10;
  end;
if pom=sucet*sucet then write ('Rovna sa') else write ('Nerovna sa');
read (I);
end.
//edit7:
Prevod z dvojkovej do desiatkovej:

Kód: Vybrať všetko

program Prevod;
var cislo,cifra,mantisa,vysledok:integer;
begin
write ('Zadaj cislo v dvojkovej sustave: ');
read (cislo);
mantisa:=1;
vysledok:=0;
while cislo>0 do begin
 cifra:=cislo mod 10;
 cislo:=cislo div 10;
 vysledok:=vysledok+cifra*mantisa;
 mantisa:=mantisa*2;
 end;
write (vysledok);
read(mantisa);

end.
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

trosku som sa pozrel na ten kod a v tom 4tom priklade zbytocne robis cyklus tolko krat. staci ti to robit o polovicu menej krat a kazdy delitel zapocitat 2x ;)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

mastermind napísal:trosku som sa pozrel na ten kod a v tom 4tom priklade zbytocne robis cyklus tolko krat. staci ti to robit o polovicu menej krat a kazdy delitel zapocitat 2x ;)
hej, to môžem.. a tak isto si to ef.KO môže robiť sám :D ja mu dávam inšpiráciu, nech si to odladí ako chce
POVAZAN
Novice
Novice
Príspevky: 8
Registrovaný: 31 jan 2013, 9:00

Re: pascal ulohy (pomoc)

Príspevok od používateľa POVAZAN »

Dobry den potreboval by som pomoc s tymto programom Napíšte program, ktorý generuje prvých n prvočísel. Sam to neviem a neviem na to prist ak by niekde vedel momoct bol by som velmi vdacny :D Vopred dakujem :D
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal ulohy (pomoc)

Príspevok od používateľa BX »

POVAZAN kľudne na to choď primitívne a testuj každé číslo na prvočíslo a až ich nájdeš N, skončíš.
POVAZAN
Novice
Novice
Príspevky: 8
Registrovaný: 31 jan 2013, 9:00

Re: pascal ulohy (pomoc)

Príspevok od používateľa POVAZAN »

Prosim neviem to vobec ja ovladam ako jednoduche prace v pascale ale toto je na mna strasne zlozite a ide mi o znamku prosim :D 8)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal ulohy (pomoc)

Príspevok od používateľa BX »

Na to ti nič zložité netreba. Jeden nekonečný cyklus (while true), jedno číslo, ktoré budeš stále zväčšovať o jedna a testovať na prvočíslo a druhé číslo ako počítadlo nájdených prvočísel. Ak bude počítadlo rovné tvojmu N, príkazom break; opustíš nekonečný cyklus.

Funkciu na test prvočíselnosti spravíš rovnako primitívne - prejdeš všetky čísla až do testovaného čísla a ak je to prvočíšlo, tak bude mať medzi nimi práve dvoch deliteľov (1 a seba) To, či je číslo X deliteľné číslom Y zistíš ako if X mod Y = 0 then je deliteľné;
(jednoduchá optimalizácia na lepšiu známku môže byť - v tejto funkcii testuj čísla len do odmocniny z testovaného čísla (funkcia sqrt(X)). Z definície deliteľnosti to stačí. Ak tam (okrem 1) nebude žiadny deliteľ, číslo je prvočíslo)
Ďalšia optimalizácia - okrem dvojky môžeš testovať len nepárne čísla. Ale to už je dosť jedno.
Napísať odpoveď