Ahoj, prosím o pomoc. Mám následující zdrojový kód. Pracuje tak že v intervalu mezi dvěma zadanými čísly vypočte prvočísla. Potřeboval bych ho ale upravit tak aby mě všechna nalezená prvočísla sečetl a posléze vypočítal a zobrazil jejich aritmetický průměr. Díky za pomoc.
uses
SysUtils;
var i,m,n:integer;
function prvo(p:integer):boolean;
Var I,del : Integer;
Begin
Del:=0;
For I:=2 to Trunc(Sqrt(p)) do {Hledame delitele}
if P mod I = 0 then
Del:=Del+1;
if (Del = 0) and (P>1) then prvo:=true
else prvo:=false;
end;
begin
write('Zadej cislo m: ');
readln(m);
write('Zadej cislo n: ');
readln(n);
for i:=m to (n-2) do
if prvo(i) and prvo(i+2) then
write(i,' ',i+2,' ');
readln;
end.
Fórum › Delphi
Součet hodnot a vypočítání aritmetického průměru
Funkci na test prvočísla máš. Ten cyklus, ze kterého s volá, moc nechápu - proč je tam prvo(i) and prvo(i+2) ? Pokud by tam bylo jen prvo(i), tak to bych chápal.
A teď k té úpravě ... do toho cyklu za tu podmínku místo vypsání nebo k němu přidej sčítání nalezených prvočísel a počítání jejich počtu. nebo-li budeš mít nějakou proměnou S a P, které budou na začátku 0. Do S budeš přičítat prvočísla a do P budeš přičítat 1 za každé nalezené prvočíslo. Po skončení cyklu vypočítáš průměr jako S / P, takže si musíš dát pozor, když se žádné prvočíslo nenajde, aby si nedělil 0.
Já sice vidím, že program vypisuje ne všechna prvočísla, ale tzv. prvočíselná dvojčata,
nicméně úprava dle tvého požadavku je celkem jednoduchá.
sekci var upravíš takto:
var i,m,n,sum,poc: Integer;
prum: String;
dále smažeš toto:
for i:=m to (n-2) do
if prvo(i) and prvo(i+2) then
write(i,' ',i+2,' ');
a místo toho tam dáš toto:
sum := 0;
poc := 0;
for i := m to n do
if Prvo(i) then
begin
sum := sum+i;
poc := poc+1;
Write(i,' ');
end;
prum := FloatToStr(sum/poc);
WriteLn;
WriteLn('Prumer z prvocisel od '+IntToStr(m)+' do '+IntToStr(n)+' je ',prum);
To xy3000. Prvočíselná dvojčata jsou taková 2 (po sobě jdoucí) prvočísla, jejichž rozdíl je 2.
Např. 3,5; 5,7; 11,13; 17,19
To Krychlik.
Máš pravdu, konec upravit třeba takto:
if poc<>0 then
begin
prum := FloatToStr(sum/poc);
WriteLn;
WriteLn('Prumer z prvocisel od '+IntToStr(m)+' do '+IntToStr(n)+' je ',prum);
end
else
begin
WriteLn;
WriteLn('V cislech od '+IntToStr(m)+' do '+IntToStr(n)+' neni zadne prvocislo');
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
Součet hodnot. — založil Luckaa
Součet hodnot — založil baryman
Součet hodnot z cyklu for — založil David
MySQL - součet hodnot — založil Kouky27
Součet některých hodnot pole — založil anakondatra