Newsgroup: it.comp.lang.pascal
Titolo: numeri primi da visualizzare

salve a tutti!
ho dinuovo un problema...
come faccio a visualizzare u
divisori di un numero intero avento fatto solo il for e il while e in tipi
di variabile integer, real, char e string.
grazie infinitamente a chi mi
risponderą..
ciao!
kiakim
--------------------------------
Inviato via 
http://usenet.iol.it


tratto da un vecchio post di cooper la soluzione mi sembra alquanto giusta e
veloce...
Function Primo (X: Longint; Var Flag: Boolean): String;
Var W: String; S: String; P: Longint;
Begin
Flag := False;
If Not (X > 0) Then Flag := True Else
Begin
S := ''; P := 2;
While X <> 1 Do
Begin
If Not (X mod P = 0) Then Inc (P) Else
Begin
Str (P, W);
S := S + W;
If X div P <> 1 Then S := S + '*';
X := X div P;
End;
End;
End;
Primo := S;
End;
(* Il programma di esempio *)
Var Err: Boolean; S: String; N: Longint;
Begin
Readln (N);
S := Primo (N, Err);
If Not Err Then Writeln (S) Else Writeln ('errore');
readln;
End.
--
----------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[

ciauz, per ora ti posto il programma ke ho fatto io, col problema ke ci sono
2 cicli repeat...until ke perņ puoi benissimo trasformare in while (ti
chiedo un minimo sforzo in fin dei conti, no??)
spero ke vada bene. Ciauz Torbo
(*********************************************)
program fattori;
uses crt;
var i,divisore,resto,m,n,a:integer;
    numero,num2:longint;
    fattore: array [1..100] of integer;
    esponente: array [1..100] of integer;
    base: array [1..100] of integer;
    primo:boolean;
    scelta:char;
procedure raggruppa;
begin
     m:=0;
     n:=0;
               repeat
               inc(n);
               inc(m);
               esponente[n]:=1;
               base[n]:=fattore[m];
                               while fattore[m]=fattore[m+1] do begin
                               inc(esponente[n]);
                               inc(m);
                               end;
               until (fattore[m+1]=0);
end;
procedure controllo;
var divisore,resto:integer;
    begin
    divisore:=trunc(sqrt(numero)+1);
    while (divisore>1) and (resto<>0) do
          begin
          resto:=numero mod divisore;
          dec(divisore);
    end;
    if resto<>0 then primo:=true else primo:=false;
end;
procedure scomponi;
begin
   divisore:=2;
   while (resto<>0) or (numero<>1) and (divisore<trunc(sqrt(numero)+1)) do
   begin
         resto:=numero mod divisore;
            if resto=0 then
            begin
            fattore[i]:=divisore;
            i:=i+1;
            numero:=round(numero/divisore);
            end
            else
            divisore:=divisore+1;
    end;
end;
procedure scrivi;
begin
writeln;
a:=1;
write(num2,' = ');
while esponente[a+1]<>0 do
      begin
      if esponente[a]<>1 then
                  begin
                  write(base[a],'^',esponente[a],' * ');
                  end;
      if esponente[a]=1 then
                  begin
                  write(base[a],' * ');
                  end;
inc(a);
end;
if esponente[a]<>1 then
begin
write(base[a],'^',esponente[a]);
end;
if esponente[a]=1 then
begin
write(base[a]);
writeln;
end;
end;
begin
textcolor(10);
repeat
clrscr;
i:=1;
write('Scrivi il numero da scomporre: ');
readln(numero);
num2:=numero;
controllo;
      if primo=false then
      begin
           while numero<>1 do
           begin
           scomponi;
           raggruppa;
           end;
           scrivi;
           writeln;
      end
      else
      begin
      writeln;
          writeln('Il numero che hai scelto '#138' un numero primo');
      end;
writeln;
write('Vuoi continuare? s/n ');
scelta:=upcase(readkey);
until (scelta='N');
if scelta='N' then exit ;
end.
(**********************************************)

 If Not (X > 0) Then Flag := True Else
[Cut]
Sighhhh sob sob ueeeee, e la identazione (ovvero, la fidanzata del
programma...) l'hai lasciata a casuccia??? Kattivo!!! :PPPPPPPPPPPP
Scherzoooo, cmq grazie per averlo ripostato :-))
Scherzozamente Cooper :)