Soluzione esercizi libro di testo - Strutture iterative

 

Strutture iterative

Pag. 310 es. 17 es. 19 es. 20 es. 21 es. 22 es. 23 es. 24
es. 25 es. 26 es. 27 es. 28 es. 29
PROGRAM POT; {es. 17 pag. 310}
    VAR
      X:INTEGER;                {BASE}
      Y:INTEGER;                {ESPONENTE}
      R:INTEGER;                {RISULTATO}
      CONT:INTEGER;             {CONTATORE DI PRODOTTO}
BEGIN
     WRITELN('DAMMI LA BASE');
     READLN(X);
     WRITELN('DAMMI L''ESPONENTE'); {3a istruzione}
     READLN(Y);
     R:=1;
     CONT:=0;  {6a istruzione}
     REPEAT
           R:=X*R;
           CONT:=CONT+1;       {9a istruzione}
     UNTIL CONT=Y;
     WRITELN('IL RISULTATO E'' ' ,R);
     READLN;
END.
program limite; {es. 19}
   var
     n: integer;                {numero di velocita}
     vr: integer;               {velocita registrata}
     aslv: integer;             {auto che hanno superato il limite di velocita}
     cont: integer;             {contatore di auto}
begin
    writeln('inserisci il numero di velocit… registrate' );
    readln(n);            {2a istruzione}
    aslv:=0;
    for cont:=1 to n do
        begin                            {5a istruzione}
             writeln ('dammi la velocit…');
             readln(vr);
             if vr>120 then        {8a istruzione}
                aslv:=aslv+1;
        end;   {10a istruzione}
    writeln(aslv , ' auto hanno superato il limite di velocit…');
    readln;
end.
Program classe;{es. 20}
    var
    n:integer;          {eta degli studenti}
    s_m:integer;         {numero studenti minore eta}
    e:integer;          {eta di uno studente}
    risp:char;           {risposta: indicatore di fine ciclo}
Begin
   s_m:=0;
   repeat
         writeln('inserisci et…');
         readln(e);                 {2a istruzione}
         if e<18 then
            s_m:=s_m+1;
         writeln ('vuoi continuare?');  {5a istruzione}
         readln (risp)
   until (risp='n') or (risp = 'N');
   writeln('il numero delle persone minorenni Š ', s_m); {8a istruzione}
   readln;
end.
program problema; {es. 21}
var
  r:char; {risposta}
  n,s,v:integer; {non sufficienze, sufficienze, voto}
  nome:string[10];  {nome studente}
begin
    n:=0;        {1a istruzione}
    s:=0;
    r:='s';    {3a istruzione}
    writeln('dammi il nome');
    readln(nome);
    while r='s'do             {6a istruzione}
    begin
        writeln('dammi un voto');
        readln(v);                          {9a istruzione}
        if v>=6 then
                s:=s+1
        else
                n:=n+1;                    {13a istruzione}
        writeln('vuoi continuare?');
        readln(r);
    end;                        {16a istruzione}
    if (n>=1)and(n<=3) then
       writeln('promosso con debito')
    else                                  {19a istruzione}
         if n>3 then
            writeln('respinto')
         else                                  {22a istruzione}
             writeln('promosso');
     readln;
end.
program albergo; {es. 22}
var
  r:char;
  na:string[15];  {nome albergo}
  c:shortint;     {categoria dell'albergo}
  npd:integer;    {numero posti disponibili}
  npa:integer;     {numero posti alberganti}
begin
  repeat
        writeln('dammi il nome dell''albergo');
        readln(na);
        writeln('dammi la categoria dell''albergo');  {3a istruzione}
        readln(c);
        writeln('dammi il numero dei posti disponibili');
        readln(npd);
        writeln('dammi il numero degli alberganti');  {7a istruzione}
        readln(npa);
        if npa>npd then
          writeln('la prenotazione non pu• essere effettuata, perchŠ mancano ', npa-npd,' posti ) {10a istruzione}
        else
        begin
          npd:=npd-npa; {13a istruzione}
          writeln('la prenotazione pu• essere effettuata');
          writeln(' rimangono disponibili ancora ' , npd,' posti');
        end;  {16a istruzione}
        writeln('vuoi continuare?');
        readln(r);
  until r='n';  {19a istruzione}
  readln;
end.
Program Elezioni;{es. 23}
var
TNI:INTEGER;
TNV:INTEGER;
TSN:INTEGER;
TSB:INTEGER;
NI:integer;
NV:integer;
NSN:integer;
NSB:integer;
N:integer;
CONT:integer;
PERC:real;
PERC_SB:real;
PERC_SN:real;
Begin
  writeln('Dammi il numero dei seggi elettorali');
  READLN(N);
  TNI:=0;  {3a istruzione}
  TNV:=0;
  TSN:=0;
  TSB:=0;  {6a istruzione}
  FOR CONT:=1 TO N DO
  Begin
  writeln('Dammi il numero degli iscritti'); {9a istruzione}
  readln(NI);
  TNI:=TNI+NI;
  writeln('Dammi il numero dei votanti'); {12a istruzione}
  readln(NV);
  TNV:=TNV+NV;
  writeln('Dammi il numero delle schede nulle'); {15a istruzione}
  readln(NSN);
  TSN:=TSN+NSN;
  writeln('Dammi il numero delle schede bianche'); {18a istruzione}
  readln(NSB);
  TSB:=TSB+NSB;
  END;  {21a istruzione}
  PERC:=(100*N)/TNI;
  PERC_SB:=(100*TSB)/TNV;
  PERC_SN:=(100*TSN)/TNV; {24a istruzione}
  writeln('Percentuale votanti su tutti i seggi ',PERC);
  writeln('Percentuale schede bianche ',PERC_SB);
  writeln('Percentuale schede nulle ',PERC_SN); {27a istruzione}
  readln;
End.
program prodotto;{es. 24}
var
  c:integer;
  d:string[15];
  p:real;
  pmax:real;
  r:char;
  cmax:integer;
  dmax:string[15];
begin
   pmax:=0;
   repeat
         writeln('dammi il codice del prodotto');   {3a istruzione}
         readln(c);
         writeln('dammi la descrizione del prodotto');
         readln(d);            {6a istruzione}
         writeln('dammi il prezzo del prodotto');
         readln(p);
         if p>pmax then  {9a istruzione}
         begin
            pmax:=p;
            cmax:=c;   {12a istruzione}
            dmax:=d;
         end;
         writeln('vuoi continuare?[s/n]'); {15a istruzione}
         readln(r);
   until (r='n') or (r='N');
   writeln('il prodotto più costoso ha il codice ' ,cmax); {18a istruzione}
   writeln('e la descrizione  ' ,dmax);
   readln;
end.

program dipendenti;{es. 25}
var
  a:integer; {anno corrente}
  d:integer; {numero dipendenti}
  dip:integer; {indice del ciclo}
  N:string[10]; {nome}
  an:integer; {anno di nascita}
  st:real; {stipendio}
  e:shortint; {et…}
  p,m:integer; {pensionabili e minorenni}
begin
  p:=0;
  m:=0;  {2a istruzione}
  writeln('dammi l''anno corrente');
  readln(a);
  writeln('dammi il numero dei dipendenti'); {5a istruzione}
  readln(d);
  for dip:=1 to d do
  begin  {8a istruzione}
       writeln(' dammi il nome, l''anno di nascita e lo stipendio');
       readln(N,an,st);
       e:=a-an; {11a istruzione}
       if e>=60 then
          p:=p+1
       else  {14a istruzione}
           if e<18 then
              m:=m+1
  end;  {17a istruzione}
  writeln('i pensionabili sono ',p);
  writeln('i minorenni sono ',m);  {19a istruzione}
  readln;
end. 
program stipendio;{es. 26}
const K = 22
var
     g:integer;
     nome:string;
     stip,som:real;
begin
     stip:=5; som :=0;
     writeln('dammi il nome');
     readln(nome);  {3a istruzione}
     for g:=1 to k do
     begin
         stip:=stip*2; {6a istruzione}
         som:=som+stip;
     end;
     writeln('lo stipendio guadagnato in 22 gg Š ' ,som:5:2);
     readln; {10a  istruzione}
end.
program obesi; {es. 27}
const
  k=0.33;
var
  o:integer; {numero degli obesi}
  n:integer; {numero di persone}
  pers:integer; {indice del ciclo}
  p:real; {peso}
  h:real; {altezza}
  i:real; {indice di obesit…}
begin
  writeln('dammi il numero di persone che inserirai');
  readln(n);  {1a istruzione}
  o:=0;
  for pers:=1 to n do
  begin    {4a istruzione}
       writeln('dammi il peso');
       readln(p);
       writeln('dammi l''altezza in cm');  {7a istruzione}
       readln(h);
       i:=p/h;
       if i>k then  {10a istruzione}
       begin
          o:=o+1;
          writeln('il numero degli obesi é ',o);  {13a istruzione}
       end;
  end;
  readln;  {16a istruzione}
end.
program copie;{es. 28}
var
   gvm:shortint;{giorno corrispondente alla vendita massima}
   vm:integer; {vendita massima}
   ng:shortint;{numero di giorni complessivi}
   ncop:integer;{numero di copie vendute in tutto}
   g:integer;{numero del giorno del mese}
   cop:integer;{numero copie vendute in un giorno}
   ris:char;{risposta}
   m:real;{vendita media}
begin
   vm:=0;
   ng:=0;
   ncop:=0;
   repeat
         writeln('dammi il giorno');
         readln(g);
         ng:=ng+1;
         writeln('dammi il numero di copie vendute');
         readln(cop);
         ncop:=ncop+cop;
         if cop>vm then
         begin
            vm:=cop;
            gvm:=g
         end;
         writeln('vuoi continuare?');
         readln(ris);
   until  (ris='n') or (ris='N');
   m:=ncop/ng;
   writeln('la vendita massima Š stata giorno ' ,gvm ,' e la media Š di ' , m:5:2);
   readln;
end.
program n29;
var
   nab:longint;         {numero abitanti}
   natt:longint;        {numero degli attivi}
   iatt:real;           {indice di attivit…}
   c:string[15];        {citt…}
   cmax:string[15];     {citt… con indice maggiore}
   cmin:string[15];     {citt… con indice minore}
   imax:real;           {indice di attivit… massimo}
   imin:real;           {indice di attivit… minimo}
   N:integer;           {numero di citt…}
   i:integer;           {indice del ciclo}
begin
     imax:=0;
     imin:= 1;
     writeln ('dammi il numero di citt…');
     readln (n);
     for i := 1 to N do
     begin
           writeln('dammi il nome della citt…');
           readln(c);
           writeln('dammi il numero degli abitanti');
           readln(nab);
           writeln('dammi il numero degli attivi');
           readln(natt);
           iatt:=natt/nab*100;
           if iatt>imax then
           begin
              imax:=iatt;
              cmax:=c;
           end
           else if iatt <= imin then
                begin
                     imin:=iatt;
                     cmin:=c
                end;
     end;
     writeln('La citt… con l''indice pi— alto Š ',cmax);
     writeln('e la citt… con l''indice pi— basso Š ',cmin);
     readln;
end.
program n29;
var
   nab:longint;         {numero abitanti}
   natt:longint;        {numero degli attivi}
   iatt:real;           {indice di attivit…}
   c:string[15];        {citt…}
   cmax:string[15];     {citt… con indice maggiore}
   cmin:string[15];     {citt… con indice minore}
   imax:real;           {indice di attivit… massimo}
   imin:real;           {indice di attivit… minimo}
   N:integer;           {numero di citt…}
   i:integer;           {indice del ciclo}

begin
     imax:=0;
     imin:= 1;
     writeln ('dammi il numero di citt…');
     readln (n);
     for i := 1 to N do
     begin
           writeln('dammi il nome della citt…');
           readln(c);
           writeln('dammi il numero degli abitanti');
           readln(nab);
           writeln('dammi il numero degli attivi');
           readln(natt);
           iatt:=natt/nab*100;
           if iatt>imax then
           begin
              imax:=iatt;
              cmax:=c;
           end
           else if iatt <= imin then
                begin
                     imin:=iatt;
                     cmin:=c
                end;
     end;
     writeln('La citt… con l''indice pi— alto Š ',cmax);
     writeln('e la citt… con l''indice pi— basso Š ',cmin);
     readln;
end.

T