jak zliczyć dane z pętli for

0

Witam , mam problem z zliczaniem liczb .

program liczby_pierwsze_zanuzone;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var i,c,b,a,n,x:Integer;
    r:array of Integer;


begin
   writeln('Wpisz liczbe ...');
   readln(a);

   for i:=1 to a do
   begin
   x:=0;
   for n:=1 to i do
   begin
   if i mod n=0 then
   x:=x+1;
   end;
   if x=2 then
   begin
   SetLength(r,i);
   b:=0;
   for c:=low(i) to high(i) do
   begin
   b:=b+1;
   end;
   end;
   writeln('W liczbie ',a,' miesci sie ',b,' liczb pierwszych');
   end;
   readln;
end.

Chodzi mi głównie o ostatnią pętlę typu for . Nie wiem czy poprawnie użyłem low/high . Ma ona wyszukane liczby pierwsze dodać np. jeżeli mam liczby 2,3,5,7 to ma wyswietlić ze są 4 liczby . Program prosi uzytkownika o wpisanie liczby i wyswietla ile liczb pierwszych zmieści się w tej liczbie podanej przez użytkownika , ale nie mogą się te liczby pierwsze powtarzać .

0

Kod niesformatowany i bez odpowiednich znaczników to się czytać nie chce i do tego te "zanuzone".

0
program liczby_pierwsze_zanuzone;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var i,c,b,a,n,x:Integer;
    r:array of Integer;


begin
   writeln('Wpisz liczbe ...');
   readln(a);

   for i:=1 to a do
   begin
   x:=0;
   for n:=1 to i do
   begin
   if i mod n=0 then
   x:=x+1;
   end;
   if x=2 then 
// tutaj są już gotowe liczby pierwsze 
   begin
   SetLength(r,i);
   b:=0;
   for c:=low(i) to high(i) do
        begin
        b:=b+1;
        end;
   end;
   writeln('W liczbie ',a,' miesci sie ',b,' liczb pierwszych');
   end;
   readln;
end.
0

Kod nadale niesformatowany

0

Pomoge mu ;p

program liczby_pierwsze_zanuzone;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var i, c, b, a, n, x : Integer;
    r : array of Integer;


begin
   writeln('Wpisz liczbe ...');
   readln(a);

   for i:=1 to a do
   begin
     x:=0;
     for n:=1 to i do
     begin
       if i mod n=0 then
       x:=x+1;
     end;
     if x=2 then
     // tutaj są już gotowe liczby pierwsze
     begin
       SetLength(r,i);
       b:=0;
       for c:=low(i) to high(i) do
       begin
         b:=b+1;
       end;
     end;
     writeln('W liczbie ',a,' miesci sie ',b,' liczb pierwszych');
   end;
   readln;
end.

0

dzięki losowy .

Ma ktoś pomysł ??

0

Błąd ortograficzny w nazwie programu? Ale to chyba nie ma wpływu na działanie kodu, a może ma ;/
A jak chcesz zrobić pętlę dla wielkości tablicy to rób ją dla wielkości tablicy, a nie wielkości zmiennej
typu integer tak jak w tym momencie. Więcej nie pomogę, bo nie wiem co to są te liczby nurkujące.

0

Najbrutalniejszy algorytm:
dla każdej liczby "i" z przedzialu 1..a sprawdzasz, czy liczba "i" jest liczba pierwsza - polecam stworzenie do tego oddzielnej funkcji :> jesli tak, to zwiekszasz licznik liczb pierwszych o 1.
W dodatku, przy sprawdzaniu pierwszosci liczby wystarczy sprawdzic czy nie dzieli sie przez jakas z liczb z przedzialu 2..sqrt(x).

0

No to może i ja coś pomogę

rogal180 napisał(a)

...
var i: Integer;
...
for c:= low(i) to high(i) do

> Chodzi mi głównie o ostatnią pętlę typu for . Nie wiem czy poprawnie użyłem low/high .

Odpowiem w następujący sposób: i tak, i nie. Tak, bo kompilator nie zgłasza błędu, natomiast nie, bo 
Low(i) = Low(Integer) = -2147483648
High(i) = High(Integer) = 2147483647

więc ta pętla będzie wyglądać tak
```delphi
for c:= -2147483648 to 2147483647 do

a zapewne nie o to Ci chodziło. Jeśli juz to powinno być:

for c:= Low(r) to High(r) do
0
program liczby_pierwsze_zanuzone;

znużone czy zanurzone?

0
program liczby_pierwsze_zanuzone;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var i, c, b, a, n, x : Integer;
    r : array of Integer;


begin
   writeln('Wpisz liczbe ...');
   readln(a);

   for i:=1 to a do
   begin
     x:=0;
     for n:=1 to i do
     begin
       if i mod n=0 then
       x:=x+1;
     end;
     if x=2 then
     // tutaj są już gotowe liczby pierwsze
     begin
       SetLength(r,i);
       b:=0;
       for c:=low(r) to high(r) do
       begin
         b:=b+1;
       end;
     end;
     end;
     writeln('W liczbie ',a,' miesci sie ',b,' liczb pierwszych');
   readln;
end.

Dla podanej liczby np. 10 wyświetla się że jest takich liczb 7 , a powinien wyświetlić 3 bo w 10 mieści się 2,3 oraz 10

1 użytkowników online, w tym zalogowanych: 0, gości: 1