Se è come dice toraz, allora questa procedura dovrebbe fare al caso tuo:
codice:
procedure Allinea(num_cifre: integer; valore: string);
var i:integer;
begin
for i:=(num_cifre - Length(valore)) Downto 0 do
write(' ');
write (valore);
end;
Ti spiego come funziona: essa prende come argomenti due parametri.
num_cifre: è un intero che rappresenta il numero di cifre del valore più grade (in base al quale effettuare l'allineamento: è ovvio che l'allineamento deve essere fatto in base al numero con più cifre)
valore: è la rappresentazione stringa del numero da stampare.
Questa procedura si preoccupa di stampare davanti al numero che deve visualizzare tanti spazi quanti sono quelli mancanti per completare il numero di cifre del più grande numero presente nella lista di valori che devi allineare.
Ti posto un esempio del suo utilizzo: questo esempio chiede all'utente l'inserimento di un array 3x3 di numeri e li stampa in forma matriciale allineati (come suggerito da toraz):
codice:
Program Matrice;
uses crt;
procedure Allinea(num_cifre: integer; valore: string);
var i:integer;
begin
for i:=(num_cifre - Length(valore)) Downto 0 do
begin
write(' ');
end;
write (valore);
end;
var mat:array[0..3,0..3] of Integer;
i, j, max:Integer;
tmp: String[80];
begin
clrscr;
for i:=0 to 2 do
for j:=0 to 2 do
begin
Writeln('Introdurre il valore ',i,',',j,': ');
Readln(mat[i,j]);
end;
Str(mat[0,0], tmp);
max := Length(tmp);
(* Qui calcolo quant'è lungo il numero più grande *)
for i:=0 to 2 do
for j:=0 to 2 do
begin
Str(mat[i,j], tmp); (* converto in stringa il numero *)
if (Length(tmp) > max) then max := Length(tmp);
end;
(* Ora nella variabile 'max' ho il numero di cifre del numero più grande *)
for i:=0 to 2 do
begin
for j:=0 to 2 do
begin
Str(mat[i,j], tmp);
Allinea(max, tmp);
end;
Writeln;
end;
end.
Spero di essere riuscito a risolvere il tuo problema.
Ciao.