Mam problem z wczytywaniem zmiennych typu string w Pascalu.
Nieważne jak zmodyfikuje poniższy kod (czy używam write, writeln, read, readln) program i tak pomija przynajmniej wczytywanie jednej zmiennej - aktualnie "dzialanie".
Dodatkowo prosiłbym o sprawdzenie funkcji o nazwie "wynik", do polecenia:
Napisać program, który DANE przekształci do postaci WYNIK
DANE:='2*3*5*1; 4*4*10;10*4*1;'
WYNIK:='11;18;15'
Podaje cały program, gdyż osobno nie ma takiego problemu:
uses crt;
const n=8;
m=6;
type tab1=array[1..n] of string;
tab2=array[1..m] of string;
tab3=array[1..4] of string;
tab4=array[1..4] of integer;
tab5=array[1..8] of byte;
tab6=array[1..35] of string;
tab=array[1..100] of integer;
var p:byte;
B:tab2;
ip,maska,dzialanie:string;
function kod(y:integer; p:byte):string;
var bin,R:string;
d:integer;
begin
B[1]:='A';
B[2]:='B';
B[3]:='C';
B[4]:='D';
B[5]:='E';
B[6]:='F';
bin:='';
while y<> 0 do
begin
if p>10 then
begin
d:=y mod p;
if d>9 then R:=B[d-9]
else str(y mod p,R);
bin:=R+bin;
y:=y div p;
end
else
begin
str(y mod p,R);
bin:=R+bin;
y:=y div p;
end;
end;
if p<11 then
begin
while length(bin)<8 do bin:='0'+bin;
end;
kod:=bin;
end;
procedure konw(ip:string; p:byte);
var x1,x2,x3,x4:integer;
begin
val(copy(ip,1,pos('.',ip)-1),x1);
delete(ip,1,pos('.',ip));
val(copy(ip,1,pos('.',ip)-1),x2);
delete(ip,1,pos('.',ip));
val(copy(ip,1,pos('.',ip)-1),x3);
delete(ip,1,pos('.',ip));
val(copy(ip,1,length(ip)),x4);
writeln(kod(x1,p),'.',kod(x2,p),'.',kod(x3,p),'.',kod(x4,p));
end;
function siec(var ip:string; maska:string):string;
var x1,y1:tab4;
a1,a2,a3,a4,b1,b2,b3,b4,mas:string;
t1,t2,t3,t4,r1,r2,r3,r4,w1,w2,w3,w4:tab5;
ms:tab6;
i:byte;
begin
mas:='';
val(copy(ip,1,pos('.',ip)-1),x1[1]);
delete(ip,1,pos('.',ip));
val(copy(ip,1,pos('.',ip)-1),x1[2]);
delete(ip,1,pos('.',ip));
val(copy(ip,1,pos('.',ip)-1),x1[3]);
delete(ip,1,pos('.',ip));
val(copy(ip,1,length(ip)),x1[4]);
val(copy(maska,1,pos('.',maska)-1),y1[1]);
delete(maska,1,pos('.',maska));
val(copy(maska,1,pos('.',maska)-1),y1[2]);
delete(maska,1,pos('.',maska));
val(copy(maska,1,pos('.',maska)-1),y1[3]);
delete(maska,1,pos('.',maska));
val(copy(maska,1,length(maska)),y1[4]);
a1:=kod(x1[1],2);
a2:=kod(x1[2],2);
a3:=kod(x1[3],2);
a4:=kod(x1[4],2);
b1:=kod(y1[1],2);
b2:=kod(y1[2],2);
b3:=kod(y1[3],2);
b4:=kod(y1[4],2);
for i:=1 to 8 do
begin
val(a1[i],t1[i]);
val(b1[i],r1[i]);
w1[i]:=(t1[i]) and (r1[i]);
val(a2[i],t2[i]);
val(b2[i],r2[i]);
w2[i]:=(t2[i]) and (r2[i]);
val(a3[i],t3[i]);
val(b3[i],r3[i]);
w3[i]:=(t3[i]) and (r3[i]);
val(a4[i],t4[i]);
val(b4[i],r4[i]);
w4[i]:=(t4[i]) and (r4[i]);
end;
for i:=1 to 8 do
begin
str(w1[i],ms[i]);
mas:=mas+ms[i];
end;
mas:=mas+'.';
for i:=1 to 8 do
begin
str(w2[i],ms[i+8]);
mas:=mas+ms[i+8];
end;
mas:=mas+'.';
for i:=1 to 8 do
begin
str(w3[i],ms[i+16]);
mas:=mas+ms[i+16];
end;
mas:=mas+'.';
for i:=1 to 8 do
begin
str(w4[i],ms[i+24]);
mas:=mas+ms[i+24];
end;
siec:=mas;
end;
function bin2dec(x:string):string;
var w,e,r,t,a,b,c,d,i:longint;
g,h,j,k:string;
begin
val(x[1],a);
w:=a;
for i:=2 to 8 do
begin
val(x[i],a);
w:=2*w+a;
end;
str(w,g);
val(x[10],b);
e:=b;
for i:=11 to 17 do
begin
val(x[i],b);
e:=2*e+b;
end;
str(e,h);
val(x[19],c);
r:=c;
for i:=20 to 26 do
begin
val(x[i],c);
r:=2*r+c;
end;
str(r,j);
val(x[28],d);
t:=d;
for i:=29 to 35 do
begin
val(x[i],d);
t:=2*t+d;
end;
str(t,k);
bin2dec:=g+'.'+h+'.'+j+'.'+k;
end;
function wynik(dane:string):string;
var d,i:byte;
suma,a:integer;
y:string;
begin
i:=1;
d:=length(dane);
wynik:='';
while i<=d do
begin
suma:=0;
repeat until dane[i]=';';
begin
y:='';
a:=0;
repeat until dane[i]='*';
begin
i:=i+1;
if dane[i]=' ' then
begin
end
else y:=y+dane[i];
end;
val(y,a);
suma:=suma+a;
if dane[i]='*' then i:=i+1;
end;
if dane[i]=';' then i:=i+1;
str(suma,y);
wynik:=wynik+y+';';
end;
end;
begin
writeln('Podaj adres ip: ');
readln(ip);
writeln('Podaj adres maski: ');
readln(maska);
writeln('Podaj podstawe kodu: ');
read(p);
if (p<=16) and (p>=2) then
begin
write('Adres ip o podstawie ',p,' to: ');
konw(ip,p);
end
else writeln('Podstawa kodu jest poza zakresem');
writeln('Adres sieci adresu ip: ',ip,' o masce: ',maska,' to: ', bin2dec(siec(ip,maska)));
writeln();
write('DANE:=');
readln(dzialanie);
writeln();
writeln('WYNIK:=',wynik(dzialanie));
end.