Pereiti prie turinio

Pascal "Blogas skaiciaus formatas"


Rekomenduojami pranešimai

Sveiki. Taigi rašau programavimo Pascaliu savarankiško darbo užduotį. O ji yra tokia:

 

Duotas žaislų sąrašas: pavadinimas[12], amžiaus apatinė riba, amžiaus viršutinė riba,žaislų kiekis, pagaminimo data .Rasti: 1) Paieška pagal vaiko amžių. Rezultatus surasyti į atskirą failą pagaminimo datos didejimo tvarka 2) Paieška pagal pavadinimą ir kainos viršutinę ribą.Rezultatus į tekstinį failą kainos didėjimo tvarka. 3) Paieška pagal kainos apatinę ribą ir pagaminimo datos viršutinę ribą.

 

Mano programa:

 

program Noname10;
uses crt;
label aa,bb,cc,dd,ee,ff;
   type
       zaislai=record
            pav:string[12];
            amzius:integer;
            kiekis:integer;
            data:integer;
            kaina:integer;
       end;
       mas=array[1..100] of zaislai;
       var
           visi:mas;
           o,k,c:integer;
           t,t1:text;
{=======================================================}
procedure langas;
begin
   window(4,2,36,11);
   textbackground(blue);
   textcolor(red);
   Writeln('**************MENIU*************');
   writeln('*     Pasirinkite varianta     *');
   writeln('* 1 Textinio failo perziura    *');
   writeln('* 2 Paieska pagal vaiko amziu  *');
   writeln('* 3 Paieska pagal pavadinima ir kainos virsutine riba*');
   writeln('* 4 Paieska pagal kainos apatine riba ir pagaminimo datos virsutine riba*');
   writeln('********************************');
   writeln('Jusu pasirinktas variantas    ','*     *');
   writeln('                         ***************');
end;
{=======================================================}
procedure pirmas(visi:mas; k:integer);
var i:integer;
begin
       window(37,2,67,24);
       textbackground(red);
       textcolor(black);
       writeln('*********Atsakymu langas**********');
for i:=1 to k do
with visi[i] do
  writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
  writeln;
  write('Spauskite 1 ir Enter grizimui i meniu    ');
  writeln(t1);
end;
{=======================================================}
procedure antras(visi:mas; k:integer);                     //Procedura vaiko amziaus paieskai
   var n,i:integer;
begin
      window(37,2,67,24);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           write('Iveskite vaiko amziu  ');   readln(n);
           for i:= 1 to k do   begin
               if n=visi[i].amzius then
                       with visi[i] do
                           begin
                               writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                              writeln(t1,pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                           end;      end;
                   writeln;
                   write('Spauskite 1 ir Enter grizimui i meniu    ');

end;
{=======================================================}
procedure  trecias(visi:mas; k:integer);                //Procedura paieskai pagal zaislo pavadinima ir pagaminimo data
    var i,n:integer;
    pavd:string[12];
begin
       window(37,2,67,24);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           Writeln('Iveskite zaislo pavadinima');
           Readln(pavd);
           Writeln('Iveskite zaislo pagaminimo data');
           Readln(n);
           for i:=1 to k do
           if (pavd=visi[i].pav) and (n=visi[i].data)then
              with visi[i] do
                 begin
                   writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                   writeln(t1,pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                 end;
           writeln;
           write('Spauskite 1 ir Enter grizimui i meniu    ');
end;
{=======================================================}
procedure  ketvirtas(visi:mas; k:integer);              //Procedura paieskai pagal zaislo kaina ir zaislo pagaminimo data
    var i,n,d:integer;
begin
       window(37,2,67,24);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           Writeln('Iveskite zaislo kaina');
           Readln(n);
           Writeln('Iveskite zaislo pagaminimo data');
           Readln(d);
           for i:=1 to k do
           if (n=visi[i].kaina) and (d=visi[i].data)then
              with visi[i] do
                 begin
                   writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                   writeln(t1,pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                 end;
           writeln;
           write('Spauskite 1 ir Enter grizimui i meniu    ');
end;
{=======================================================}
begin
       assign(t,'duom.dat'); reset(t);
       assign(t1,'rez.dat'); rewrite(t1);
       k:=0;
       while not eof(t) do
            begin
               k:=k+1;
               with visi[k] do
               readln(t,pav,amzius,kiekis,data,kaina);
            end;
{=======================================================}
 aa: langas;  c:=0;
   gotoxy(29,8);
    readln(o);
       case o of                                             {case funkcija atitinkamam variantui pasirinkti}
           1:begin clrscr; pirmas (visi,k); cc: readln(c); if c=1 then begin  {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end        {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto cc; end;  end;  {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           2:begin clrscr; antras (visi,k); dd: readln(c); if c=1 then begin  {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end        {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto dd; end;  end;   {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           3:begin clrscr; trecias (visi,k); ee: readln(c); if c=1 then begin {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end         {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto ee; end;  end;    {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           4:begin clrscr; ketvirtas (visi,k); ff: readln(c); if c=1 then begin {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end         {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto ee; end;  end;    {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           5:goto   bb; end;                                                  {uzdaro programa}
           bb: close(t);close(t1);  {uzdaromi duomenu ir atsakymu failai}
end.

 

Ir užduoties duomenų failas:

 

Snieguole   2 18 1925 3
Meskinas    6 85 1941 6
Pokemonas   1 55 1953 7
Senis       1 53 1955 7
Katinas     1 41 1974 7
Suo         2 18 1999 7

 

Taigi, ir prireikė pagalbos. Mano nuomone, programa parašyta kaip ir teisingai(o jeigu ne, būtų puiku išgirsti Jūsų nuomones kas kur blogai), tačiau kas kart kai bandau paleisti programą, man Pascalis meta klaidą "Blogas skaiciaus formatas" tie 122 eilute(

readln(t,pav,amzius,kiekis,data,kaina);

). Galbūt kas nors, kas gali būti negerai ir pagelbėtų su šia klaida? Būčiau baisiai dėkingas :).

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš kaip suprantu čia yra klaida tekstiniame faile. Na, aš po pavadinimo(žaislo) dedu 12 simbolių, ir tada 13-ame rašau amžiaus skaitmenį. Tiesa sakant bandžiau ir kitaip, t.y. pradėjau rašyti amžių ties 12 jau simboliu, bet tas pats gaunasi :(.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man viskas pasileido iš pirmo karto. Pasitikrink koduote, kuria saugai duomenų failą. Turi būti ASCI, kitaip pascalis nesupranta.

 

P.S. Kažkas su išvedimu į ekraną negerai, labai negražiai viską atvaizduoja, pasitikrink ir ten.

 

Sėkmės ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai dėkingas už atsakymą, tačiau niekur nerandu, kur reikia pakeisti koduotę į būtent tokią(ASCI). Pvz. aš jei per Notepad saugoju duomenų failą tai yra pasirinkimas tik ANSI(tokiu ir saugojau), o per Pascal programą tai niekur nerandu kur tai padaryti. Būtų nuostabu jei pasakytumėte, kur būtent keisti koduotę.

O dėl išvedimo, tai aš čia tik norėjau pasibandyti, ar veikia programa, išvedimą į ekraną dar taisysiu :).

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Sveiki. Iškilo problema su šia programėle. Trečia ir ketvirta procedūros neveikia,o jos turėtų(pagal sąlylygą) išvesti įvestą zaislo pavadinima ir kainos viršutinę ribą bei žaislo kainą ir žaislo pagaminimo datą. Tai yra kai pavydzžiui vykdau trečią procedurą, įvedu į ekraną žaislo pavadinimą ir kainą ir turėtų man į ekraną išvesti to žaislo informaciją(visus kriterijus) bet procedūra nieko nedaro pagal mano parašytą procedūrą(tas pats ir su ketvirta procedūra). Gal žinote, ką šiose procedūros man reiktų pakeisti, kad jos veiktų tinkamai ir pagal sąlygą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėl trečios procedūros: nuskaičius pavadinimus iš failo, jie visi būna lygiai 12 simbolių ilgio, t.y. jei žodis trumpesnis nei 12 simbolių, likusi vieta užpildoma tarpais. Su tuo susidoroti gali dviem būdais:

  1. Po nuskaitymo nukarpyti tarpus nuo pavadinimų.
  2. Trečioje procedūroje, po pavadinimo įvedimo pridėti trūkstamus tarpus.

Ketvirta procedūra bent jau man veikė gerai, įvedus prekės kainą ir datą į ekraną išvesdavo prekės informaciją.

 

Sėkmės!

 

P.S.: Jei gali pasidalink užduoties sąlyga, bus lengviau susigaudyt jei iškils daugiau problemų :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Salyga:

 

Duotas žaislų sąrašas: pavadinimas[12], amžiaus apatinė riba, amžiaus viršutinė riba,žaislų kiekis, pagaminimo data .Rasti: 1) Paieška pagal vaiko amžių. Rezultatus surasyti į atskirą failą pagaminimo datos didejimo tvarka 2) Paieška pagal pavadinimą ir kainos viršutinę ribą.Rezultatus į tekstinį failą kainos didėjimo tvarka. 3) Paieška pagal kainos apatinę ribą ir pagaminimo datos viršutinę ribą.

 

 

Redaguotas failas:

 

 

program Noname10;
uses crt;
label aa,bb,cc,dd,ee,ff;
   type
       zaislai=record
            pav:string[12];
            amzius:integer;
            kiekis:integer;
            data:integer;
            kaina:integer;
       end;
       mas=array[1..100] of zaislai;
       var
           visi:mas;
           o,k,c:integer;
           t,t1:text;
{=======================================================}
procedure langas;
begin
   window(0,0,100,30);
   textbackground(white);
   textcolor(red);
   Writeln('*                          MENIU                                        *');
   writeln('*=================Pasirinkite varianta==================================*');
   writeln('* 1 Tekstinio failo perziura                                            *');
   writeln('* 2 Paieska pagal vaiko amziu                                           *');
   writeln('* 3 Paieska pagal pavadinima ir kainos virsutine riba                   *');
   writeln('* 4 Paieska pagal kainos apatine riba ir pagaminimo datos virsutine riba*');
   writeln('* 5 Pabaiga                                                             *');
   writeln('Jusu pasirinktas variantas * ' ,'*');
end;
{=======================================================}
procedure pirmas(visi:mas; k:integer);
var i:integer;
begin
       window(0,0,90,11);
       textbackground(red);
       textcolor(black);
       writeln('*********Atsakymu langas**********');
for i:=1 to k do
with visi[i] do
  writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
  writeln;
  write('Spauskite 1 ir Enter grizimui i meniu    ');
  writeln(t1);
end;
{=======================================================}
procedure antras(visi:mas; k:integer);                     //Procedura vaiko amziaus paieskai
   var n,i:integer;
begin
      window(200,200,200,200);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           write('Iveskite vaiko amziu  ');   readln(n);
           for i:= 1 to k do   begin
               if n=visi[i].amzius then
                       with visi[i] do
                           begin
                               writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                              writeln(t1,pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                           end
                       end;
                   writeln;
                   write('Spauskite 1 ir Enter grizimui i meniu    ');
end;
{=======================================================}
procedure  trecias(visi:mas; k:integer);                //Procedura paieskai pagal zaislo pavadinima ir pagaminimo data
    var i,n:integer;
    pavd:string[12];
begin
       window(0,0,90,11);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           Writeln('Iveskite zaislo pavadinima');
           Readln(pavd);
           Writeln('Iveskite zaislo pagaminimo data');
           Readln(n);
           for i:=1 to k do
           if (pavd=visi[i].pav) and(n=visi[i].data) then
              with visi[i] do
                 begin
                   writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                   writeln(t1,pavd:12,amzius:4,kiekis:3,data:6,kaina:3);
                 end;
           writeln;
           write('Spauskite 1 ir Enter grizimui i meniu    ');
end;
{=======================================================}
procedure  ketvirtas(visi:mas; k:integer);              //Procedura paieskai pagal zaislo kaina ir zaislo pagaminimo data
    var i,n,d:integer;
begin
       window(0,0,90,11);
       textbackground(red);
       textcolor(black);
           writeln('        Atsakymu langas        ');
           Writeln('Iveskite zaislo kaina');
           Readln(n);
           Writeln('Iveskite zaislo pagaminimo data');
           Readln(d);
           for i:=1 to k do
           if (n=visi[i].kaina) and (d=visi[i].data)then
              with visi[i] do
                 begin
                   writeln(pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                   writeln(t1,pav:12,amzius:4,kiekis:3,data:6,kaina:3);
                 end;
           writeln;
           write('Spauskite 1 ir Enter grizimui i meniu    ');
end;
{=======================================================}
begin
       assign(t,'duom.txt'); reset(t);
       assign(t1,'rez.dat'); rewrite(t1);
       k:=0;
       while not eof(t) do
            begin
               k:=k+1;
               with visi[k] do
               readln(t,pav,amzius,kiekis,data,kaina);
            end;
{=======================================================}
 aa: langas;  c:=0;
   gotoxy(29,8);
    readln(o);
       case o of                                             {case funkcija atitinkamam variantui pasirinkti}
           1:begin clrscr; pirmas (visi,k); cc: readln(c); if c=1 then begin  {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end        {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto cc; end;  end;  {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           2:begin clrscr; antras (visi,k); dd: readln(c); if c=1 then begin  {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end        {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto dd; end;  end;   {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           3:begin clrscr; trecias (visi,k); ee: readln(c); if c=1 then begin {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end         {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto ee; end;  end;    {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           4:begin clrscr; ketvirtas (visi,k); ff: readln(c); if c=1 then begin {kreipiasi i procedura} {nuskaito c kad galima butu grizti i meniu}
           clrscr; goto aa; end         {valo ekrana} { nukreipia i atitinkama label }
           else begin
           write('Klaida, tai ne 1 , ivesk is naujo'); goto ee; end;  end;    {nurodo neteisinga grizimo i meniu pasirinkima} {grazina i atitinkama label kad nuskaitytu is naujo c}
           5:goto   bb; end;                                                  {uzdaro programa}
           bb: close(t);close(t1);  {uzdaromi duomenu ir atsakymu failai}
end.

 

Duomenu failas:

 

Snieguole   2 18 1925 3
Meskinas    6 85 1941 6
Pokemonas   1 50 1953 7
Senis       1 53 1955 7
Katinas     1 20 1974 7
Suo         2 18 1999 7
Berniukas   4 19 2000 8
PedoBear    2 19 2000 8
Telefonas   8 20 2001 8
Zaislas     1 20 2010 9
Pianinas    3 25 2015 9

 

Taip, ketvirta procedura veikia, durnius aš netokius duomenis rašiau, bet dėl trečios taip nesuprantu, ką reikia pakeisti niekaip. Beje, bet kokiu atveju esu baisiai dėkingas Tau už pagalbą :)

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pridėk nuskaityme tarpų pavadinime trynimą:

while not eof(t) do
        	begin
           	k:=k+1;
           	with visi[k] do
           	readln(t,pav,amzius,kiekis,data,kaina);
           	if pos(' ',visi[k].pav)<>0 then
               	Setlength(visi[k].pav,pos(' ',visi[k].pav)-1);
        	end;

 

Pridėjus tai trečia procedūra veikia, bet šiek tiek pasikeičia pavadinimų išvedimas į ekraną - pavadinimai lygiuojasi prie dešiniojo krašto, ne prie kairiojo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...