1. Realizzare uno spezzone di programma Pascal che accetti da tastiera, per continuare, solo un carattere numerico. (REPEAT). until (w=> 0 ) and (w<= 9 );. until (w in [ 0.. 9 ]); 2. Realizzare uno spezzone di programma Pascal che accetti da tastiera, per continuare, solo una lettera dell alfabeto inglese compresa fra A e H o la lettera V. (REPEAT). until (w=> A ) and (w<= H ) or (w= V ); 3. Realizzare uno spezzone di programma Pascal che accetti da tastiera, per continuare, solo una vocale, indifferentemente minuscola o maiuscola. (REPEAT). w:=upcase(readkey) until (w in [ A, E, I, O, U ]); 4. Realizzare uno spezzone di programma Pascal che accetti da tastiera, per continuare, solo l Invio o il tasto ESC. (REPEAT). until (w=chr(13)) or (w=chr(27)); {oppure...} until (w=#13) or (w=#27); 5. Realizzare un programma Pascal che stampi al centro dello schermo ogni carattere, convertito in maiuscolo, digitato dalla tastiera finché non si prema il tasto ESC. program Tasti; uses crt; var c:char; Prof. A.Venia Pagina 1
gotoxy(40,12); c:=readkey; write(upcase(c)) until c=#27; 6. Caricare da input un Array di stringhe e stamparne poi tutte le iniziali. (FOR) Program stringhe; Var A:Array[1..50] of string; For k:=1 to 50 do Readln(A[k]); For k:=1 to 50 do Write(A[k][1]); 7. Caricato da input un Array numerico di tipo intero, stampare prima tutti quelli pari e poi tutti quelli dispari. (FOR) Program pari; Var A:Array[1..50] of integer; For k:=1 to 50 do Readln(A[k]); For k:=1 to 50 do if not(odd(a[k])) then Writeln(A[k]); For k:=1 to 50 do if odd(a[k]) then Writeln(A[k]); 8. Realizzare un programma Pascal che, data da input una stringa, calcoli e stampi la somma dei codici ASCII dei singoli caratteri ed infine ne calcoli e stampi il valore medio. (FOR) Program codici; Var A:string; S:integer; M:Real; Readln(A); S:=0; For k:=1 to length(a) do S:=S+ord(A[k]); Writeln(S); M:=S/length(A); Writeln(M); 9. Data da input una stringa S e un numero N (<255), se N è pari allora per N volte stampare la stringa S altrimenti cancellare lo schermo e stampare L informatica ci tiene compagnia. (IF FOR) Program prova; Uses crt; Var S:string; K,N:byte; Prof. A.Venia Pagina 2
Readln(S); If Not(odd(N)) then For k:=1 to N do Writeln(S) else clrscr; write( L informatica ci tiene compagnia ) 10. Realizzare un programma Pascal che dati da input due interi m ed n, calcoli e stampi la somma di tutti i termini fra il più piccolo e il più grande dei due numeri dati esclusi gli estremi. (FOR IF) Program somma; Var m,n,dep,k,s:integer; Readln(m); Readln(n); If m>n then {scambio di m e n} Dep:=m; m:=n; n:=dep S:=0; For k:=m+1 to n-1 do S:=S+K; Write(S); 11. Realizzare un programma Pascal che, caricati da input due Array numerici della stessa dimensione, stampi la media dei valori che hanno lo stesso indice all interno dei due Array e calcoli anche la posizione del valore medio più grande. (FOR IF) Program somma; Var A,B:Array[1..100] of integer; Dep:Real; K,p:byte; For k:=1 to 100 do Readln(A[k]); For k:=1 to 100 do Readln(B[k]); p:=1; For k:=1 to 100 do Dep:= (A[k]+B[k])/2 Writeln(Dep); If Dep>(A[p]+B[p])/2 then p:=k Write(p); 12. Realizzare un programma Pascal che, caricato da input un Array numerico, incrementi di uno tutti gli elementi di posto pari e diminuisca di uno quelli di posto dispari. Stampi, infine, l'array così modificato. (FOR IF) Program dispari; Var A:Array[1..100] of integer; Prof. A.Venia Pagina 3
For k:=1 to 100 do Readln(A[k]); For k:=1 to 100 do if odd(k) then A[k]:=A[k]-1 else A[k]:=A[k]+1; For k:=1 to 100 do Writeln(A[k]); 13. Realizzare un programma Pascal che, dati da input due stringhe, stampi alternativamente un carattere della prima ed uno della seconda; nel caso in cui i caratteri di una delle due stringhe siano già terminati vengono sostituiti da asterischi. (IF FOR) Program stringhe; Var A,B:string; K,m,m,Dep:byte; Readln(A); Readln(B); m:=length(a); n:=length(b); If m<n then For k:=1 to m do Write(A[k],B[k]); For k:=m+1 to n do Write( *,B[k]) End else For k:=1 to n do Write(A[k],B[k]); For k:=n+1 to m do Write(A[k], * ) End; 13. Dati due array (chiamati X e Y) di 100 elementi di tipo intero, caricare il primo da input. Copiare gli elementi di X in Y con la seguente regola: il k-esimo elemento di Y è uguale alla somma dei primi k elementi di X cioè Y[1] X[1]; Y[2] X[1]+X[2]; Y[3] X[1]+X[2]+X[3];.. Stampare, infine, Y. (FOR) program somme_parziali; uses crt; var X,Y:array[1..100] of integer; s:integer; k:byte; for k:=1 to 100 do readln(x[k]); s:=0; for k:=1 to 100 do s:=s+x[k]; Y[k]:=s for k:=1 to 100 do writeln(y[k]); until keypressed Prof. A.Venia Pagina 4
14. Data da input una stringa S, trovare il carattere più grande in essa contenuto. program stringa; uses crt; var S:string; c:char; k,l:byte; readln(s); L:=length(S); C:=S[1]; for k:=2 to L do if S[k]>c then c:=s[k]; writeln(c); until keypressed Prof. A.Venia Pagina 5
CODIFICA Data una stringa, si vuole trasformarla sostituendo ogni suo carattere con quello successivo nel codice ASCII. program codifica_1; k:byte; for k:=1 to length(s) do s[k]:=succ(s[k]); Sostituendo al valore 1 una variabile, si può ottenere uno spiazzamento a nostra scelta: codifica_3. program codifica_3; k,n:byte; n:=... for k:=1 to length(s) do s[k]:= chr(ord(s[k])+n); Ci proponiamo ora di realizzare una codifica ciclica, cioè, quando una lettera codificata supera la posizione dell ultimo carattere, che è la Z, allora ricomincia dalla A: codifica_5. Nel caso in cui lo spostamento (che da ora in poi chiameremo spiazzamento) fosse più grande di 1, questo sistema non sarebbe più così facilmente applicabile; daremo perciò la nuova versione: codifica_2. program codifica_2; k:byte; for k:=1 to length(s) do s[k]:= chr(ord(s[k])+1); Volendo codificare solamente i caratteri dell alfabeto, dobbiamo aggiungere un controllo con l istruzione IF. codifica_4. program codifica_4; k,n:byte; n:=... for k:=1 to length(s) do if upcase(s[k]) in [ A.. Z ] then s[k]:= chr(ord(s[k])+n); program codifica_5; k,n:byte; n:=... for k:=1 to length(s) do if upcase(s[k]) in ['A'..'Z'] then p:=ord(s[k])+n; if upcase(chr(p))>'z' then p:=p-26; s[k]:= chr(ord(p)); Prof. A.Venia Pagina 6