anddiiss Posted February 21, 2012 Report Share Posted February 21, 2012 (edited) Sveiki! Nezināju, kur citur rakstīt, tāpēc vienīgā loģiskā vieta izskatījās šī. Kā jūs manīsiet, esmu jauniņais, taču pat par spīti tam man ir milzum daudz problēmu ar kurām jātiek galā, piemēram, vecais labais pascal man negrib padoties rokā un strādāt kā vajag. No manis tika prasīts izveidot programmu, kura atļauj ievadīt simbolu rindu: blabla 5.45 ahah utt.. To arī izdarīju, bija prasīts izvilkt reālos skaitļus no turienes, to arī panācu, papūloties, bet tagad, no manis ir prasīts saskaitīt šos skaitļus,diemžēl tas vairs nav tik vienkārši, dators pēc mana skripta skaita tā: 5.1 + 2 = 5+1+2=8 ... galīgi greizi. Ko lai es pielaboju? 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.: '); write(m); writeln; for n:=1 to l do begin Val(m[n], u[n], i); writeln(u[n]:2:2); sum:=sum+u[n]; end; //writeln('Ciparu summa ir : ', sum:2:2); readln; Edited February 21, 2012 by anddiiss Quote Link to comment Share on other sites More sharing options...
Maris-S Posted February 23, 2012 Report Share Posted February 23, 2012 (edited) Sagribējās atsvaidzināt Pascal zināšanas. :) Īstenībā nesaprotu kāpēc Tev jāizmanto visi tie masīvi ar skaitļiem un burtiem? Arī mainīgo nosaukumi, izņemot Sum, nav informatīvi. Cik izskatās nav nemaz pārbaudes uz nestandarta pierakstu, piemēram '5..10', vai '5.10.8.7'. Viens no variantiem varētu būt šāds: program realsum; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, { you can add units after this } crt; {$R *.res} var RealNumbersSet: array[1..10] of real; InputString: String; ConvertedNumber, Sum: Real; Code: word; Dot: boolean; StringLength, FirstNumber, AsciiCode, i, j: Byte; begin InputString := 'aaa 52.40 bbb 8.73.7.15 ccccccc5..10.'; StringLength := Length(InputString); i := 1; j := 0; FirstNumber := 0; Dot := false; Sum := 0; while (i <= StringLength) do begin AsciiCode := ord(InputString[i]); if FirstNumber > 0 then begin if (AsciiCode = 46) then begin if (i = StringLength) or (ord(InputString[i + 1]) = 46) or (Dot) then begin AsciiCode := 0; Dot := false; end else Dot := true; end; if ((AsciiCode < 48) or (AsciiCode > 57)) and (AsciiCode <> 46) then begin val(Copy(InputString, FirstNumber, i - FirstNumber), ConvertedNumber, Code); if Code = 0 then begin inc(j); RealNumbersSet[j] := ConvertedNumber; end; FirstNumber := 0; Dot := false; end; end else begin if (AsciiCode >= 48) and (AsciiCode <= 57) then begin FirstNumber := i; end; end; inc(i) end; writeln('Real values in string:'); for i := 1 to j do begin writeln(RealNumbersSet[i]:0:2); Sum := Sum + RealNumbersSet[i]; end; writeln; writeln('Real values sum: ', Sum:0:2); repeat until keypressed; end. Programma veidota uz FreePascal, bet domāju viņai būtu jāstrādā arī uz Turbo/Borland Pascal, algoritms jau nu noteikti. Negatīvi skaitļi arī netiek pārbaudīti. Edited February 23, 2012 by Maris-S Quote Link to comment Share on other sites More sharing options...
anddiiss Posted February 23, 2012 Author Report Share Posted February 23, 2012 Danke par kodu, krasi atšķiras no mana, atvieglo arī manu darbu, milzum liels paldies. Pieslīpēšu šo kodu priekš Delphil. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.