Jump to content

Simbolu apstrāde - Pascal


Andis
 Share

Recommended Posts

Sveiki jau atkal! Atkal man ir radusies maza problēmiņa, ar kuru netieku galā.. :(

Īsumā:

Veikt simbolu apstrādi individuālam uzdevumam. Rezultātu izvadīt tādā formā, kas ļauj lietotājam pārliecināties par izvēlētā algoritma pareizu darbību.
Uzdevums:
Pārveidot ievadīto simbolu rindu tā, lai rindā paliktu tikai reālie skaitļi. Reālos skaitļos punktu aizvietot ar komatu.

 

Tātad, cik es noprotu, un, protams, cik es māku no šī visa pasākuma ir tas, ka pirmā prasība apmērma balstās tā:

 

program Project2;
{$APPTYPE CONSOLE}
uses
 SysUtils;
var
a:array[1..30]of string;
n,k:integer;
realie:array[1..30]of string;
begin
writeln;
writeln('------------------------------------------------------------------------');
writeln('Sis programmas merkis ir izvadit no simbolu rindas realos skaitlus!!');
writeln('Ludzu, ievadiet vairakus skaitlus, lai no tiem atlasitu realos skaitlus!');
writeln('------------------------------------------------------------------------');
write('Cik simbolus ievadisiet:? ');
readln(k);
for n:=1 to k do
begin
write('Simbolu rinda: ');
//write('Simbolu rinda: ');
readln(a[n]);
end;
writeln('Paldies! Informacija ir apkopota!');
for n:=1 to k do
begin
if (a[n] > '0') and (a[n] <= '999.99') then
begin
realie[n]:=realie[n]+a[n];
write(realie[n],';');
end;
end;
readln;
end.

 

Un pat tādā gadījumā programma man neizvadīs negatīvos reālos skaitļus. Noprotu, ka simbolu ievadei derēs arī mans paņēmiens, tiesa? Taču kā punktu aizstāt ar komatu? Prāts liek man domāt, ka darbība notiks ar Length, bet kā tad tas izskatās kodā?

 

 

 

 

Edit!

 

Ehh, es tikai tikko apjautu to, ka no manis ir prasīta viena simbolu rinda, respektīvi, sanāk tā: ashashaahash 5.67 aaah 8 hasha

Un tad laikam man no tās rindas ir jāatrod un jāizvelk reālie, ko es jau nemācēšu tiešām, padomi?

Sanāk, ka viss, ko esmu rakstījis ir nelietojams.

 

Labi, skatos, ka neviens man tā arī nesniedza palīdzīgu roku ar padomu, tāpēc parkodēju pats, cik nu pratu.

Rezultāts. Programma izvada reālos skaitļus no simbolu rindas, bet nespēj sekmīgi tos aprēķināt, ja vērtība ir reāla, nevis integer.

Teiksim tā, rakstot: andis 5 7

es iegūšu summu 12, bet tajā pašā laikā, ja es rakstītu: andis 5.1 2, tad programma rēķinātu: 5+1+2=8..

Kāpēc tā?

 

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils;
var
  u:array[1..10]of real;
  f:array[1..10]of string = ('0','1','2','3','4','5','6','7','8','9');
  o:array[1..26]of string = ('a','b','c','d','e','f','g','h','i','j','k','l',
  'm','n','o','p','q','r','s','t','u','x','y','z','v','w');
  a,s,m,t:string;
  l,k,n,q,i:integer;
  sum:real;
begin
writeln;
writeln('------------------------------------------------------------------------');
writeln('Sis programmas merkis ir izvadit no simbolu rindas realos skaitlus!!');
writeln('Ludzu, ievadiet vairakus simbolus, lai no tiem atlasitu realos skaitlus!');
writeln('------------------------------------------------------------------------');
writeln;
write('Ievadit simbolu rindu: ');
readln(a);
m:='';
l:=length(a);
for n:=1 to l do
 begin
   s:=Copy(a,n,1);
   if (s = '.') then m:=m+s;
 for q:=1 to 26 do begin
    s:=Copy(a,n,1);
    t:=Copy(a,n+1,1);
    if (s = ' ') and (t = o[q] ) then m:=m;
    end;
   for k:=1 to 10 do
  begin
    s:=Copy(a,n,1);
    t:=Copy(a,n+1,1);
    if (s= ' ')  and (t = (f[k]))then m:=m+s;
    if (s = (f[k]))then m:=m+s;
  end;
  end;
writeln;
Write('Simbolu rindas realie sk.: ');
writeln(m);
writeln;
sum:=0;
for n:=1 to l do
 begin
 Val(m[n], u[n], i);
 sum:=sum+u[n];
 end;
writeln('Ciparu summa ir : ', sum:2:2);
readln;

Labots - Andis
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...