Pereiti prie turinio

Klausimėlis del Pascalio


Rekomenduojami pranešimai

Taigi bandant atlikti IT vbe programavimo užduotis, susidūriau su viena problema nuskaitant failą, jos pavadinimas- "bad numeric format".

Užduoties lapą prisegu, o mano kodas:

program varzybos;
type zmogus = record
    vardaspavarde : string[20];
    laikasmin :integer;
    laikass : integer;
    visaslaik : longint;
    grupe: integer;
    end;
zmones = array[1..50] of zmogus;
Mas = array [1..50] of integer;
var
    F     : text;
    i,N,j : integer;
    zN    : Mas;
    zm    : zmones;



procedure skaitymas;
var
 min,sek,isviso : integer;
 vard:string[20];
begin
assign(F,'U2.txt');
reset(F);
Readln (F,N);
for i :=1 to N do
   begin
       readln (F,zN[i]);
        for j:=1 to zN[i] do
           begin
               readln(F,vard,min,sek);
               isviso:= isviso+1;
               zm[isviso].vardaspavarde := vard;
               zm[isviso].laikasmin := min;
               zm[isviso].laikass := sek;
               zm[isviso].visaslaik := zm[isviso].laikasmin*60+zm[isviso].laikass;
               zm[isviso].grupe := i;
           end;
   end;
close(F)
end;



begin
skaitymas;
readln;
end.

2009_pagr_2Uzduotis.doc

Redagavo VDabar
Nuoroda į pranešimą
Dalintis kituose puslapiuose

turbūt pas mane kažkoks lievas pascalis, nes vos bandant debuginti visas užsilagina, išmeta errora ir išsijungia.

 

Na, greit sugalvojus, tada... Daryk readln(); po kiekvieno svarbesnio dalyko, tada žinosi, po kurios vietos užlūžta.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, greit sugalvojus, tada... Daryk readln(); po kiekvieno svarbesnio dalyko, tada žinosi, po kurios vietos užlūžta.

pradėjo mest, ranges overun klaidą, ką povelnių ji reiškia ?:D beje ir su readln() vis tiek niekaip negaliu rasti klaidos.

Redagavo VDabar
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man toks klausimėlis kilo, kodėl procedūroje nėra aprašomi jos globalieji/lokalieji kintamieji?

procedure skaitymas(štai čia);
var
 min,sek,isviso : integer;
 vard:string[20];

sorry už durną klausimą, bet ką jie duoda? aš visiškai neseniai pradėjau dirbt su tuo pascaliu, tai visiškai dar žalias, ypač su procedūrų ir funkcijų korektiškais aprašais.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

sorry už durną klausimą, bet ką jie duoda? aš visiškai neseniai pradėjau dirbt su tuo pascaliu, tai visiškai dar žalias, ypač su procedūrų ir funkcijų korektiškais aprašais.

Procedūra - turi daugybė išjėjimų ir vieną įėjimą, pvz

procedure skaityk(var zmogus : zmones; var laikas : iteger)

skliaustuose aprašomi kintamieji kuriuos nori išsaugoti/keiti arba naudoti, būtinai turi nurodyti jų tipą, jeigu prieš kintamajį rašai VAR reiškias atlikus procedūrą jo reikšmė pasikeis(jeigu tu tai darei), o jeigu tau tik reikia panaudoti ir nekeisti kintamojo reikšmės VAR geriau nerašyti, nes gali pakeisti visa tavo programos esmę. Vėliau pagrindinėj programoje vyksta procedūros iškvietimas

skaityk(nurodai kintamuosius, tik pavadinimus, ju eiliškumas ir tipas turi
atitikti procedūrą bei jie turi būti aprašyti pagr. programos kintamuosiuose)

Na, o funkcija tas pats kas procedūra, tik ji turi viena atsakymą,

function suma(a,b : integer): integer - nurodai koks bus atsakymas
begin
suma = a+b; - funkcijos turi tik viena atsakymą, daug įėjimų - a,b, o atsakymas visada yra jos pavadinimas.
end;

Tikiuosi supratai :)

 

Patariu gerai išnagrinėti šitą Video, bei antrą dalį, užduotis rasi NEC puslapyje, šie abu video kažkada labai padėjo perprasti paskalį :)

 

p.s.

procedure skaitymas;
var
 min,sek,isviso : integer;
 vard:string[20]; šitie kintamieji irgi yra reikalingi, bet jie galios tik tol kol vyks procedūra/funkcija, paskui bus pašalinti iš atminties, taigi jei tau reikia gauti kažkokių duomenų(skaitymas)aprašinėk viską :"skaityk(var čia)" ir naudok var.

Tikiuosi neklaidinu tavęs, nes pats visko savarankiškai išmokau :)

Redagavo Peupeu
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Procedūra - turi daugybė išjėjimų ir vieną įėjimą, pvz

procedure skaityk(var zmogus : zmones; var laikas : iteger)

skliaustuose aprašomi kintamieji kuriuos nori išsaugoti/keiti arba naudoti, būtinai turi nurodyti jų tipą, jeigu prieš kintamajį rašai VAR reiškias atlikus procedūrą jo reikšmė pasikeis(jeigu tu tai darei), o jeigu tau tik reikia panaudoti ir nekeisti kintamojo reikšmės VAR geriau nerašyti, nes gali pakeisti visa tavo programos esmę. Vėliau pagrindinėj programoje vyksta procedūros iškvietimas

skaityk(nurodai kintamuosius, tik pavadinimus, ju eiliškumas ir tipas turi atitikti procedūrą bei jie turi būti aprašyti pagr. programos kintamuosiuose)

Na, o funkcija tas pats kas procedūra, tik ji turi viena atsakymą,

function suma(a,b : integer): integer - nurodai koks bus atsakymas
begin
suma = a+b; - funkcijos turi tik viena atsakymą, daug įėjimų - a,b, o atsakymas visada yra jos pavadinimas.
end;

Tikiuosi supratai :)

tai jeigu gerai supratau, man realiai i skaitymo procedūrą nieko siųst nereikia, nebent kažkaip po var išgaut žmogaus bendra masyvą, ar ne?

 

P.S. dėkui už video, mėginsiu viską nusekliai išnagrinėti.

 

P.S.S. bet vis tiek, gal galėtum pažiūrėti kas šioje mano skaitymo programoje yra blogai? nes labai užknisa, kai nežinai net ką daryt paprasčiausioje nuskaitymo proceduroje.

Redagavo VDabar
Nuoroda į pranešimą
Dalintis kituose puslapiuose

tai jeigu gerai supratau, man realiai i skaitymo procedūrą nieko siųst nereikia, nebent kažkaip po var išgaut žmogaus bendra masyvą, ar ne?

 

P.S. dėkui už video, mėginsiu viską nusekliai išnagrinėti.

 

P.S.S. bet vis tiek, gal galėtum pažiūrėti kas šioje mano skaitymo programoje yra blogai? nes labai užknisa, kai nežinai net ką daryt paprasčiausioje nuskaitymo proceduroje.

Tavo atveju procedūra procedūra nuskaito failą, bet kinamųjų neišsaugoja, todėl, viską ką nori išsaugoti rašyk taip :

procedure skaityk(VAR pvzbegiku kiekis : integer; var irasotipomasyvas : masyvo pavadinimas; ir t.t.)
var kintamieji kurie nebus veliau saugomi pvz i,j : integer - sukti masyvam..
begin
ka daro procedura
end;
var begiku kiekis : integer;
irasotipoas masyvas: masyvo pavadinimas...
begin
pagrindinė programa
proceduros iškvietimas
skaityk(begiku kiekis, iraso tipo masyvas) <-- siuot atveju tavo begiku kiekis ir iraso tipo masyvas igija reiksmes 
kurios išsisaugo. iškviečiant procedūra pavadinimai nebūtinai turi sutapti, tik jų tipas ir kiekis.. 
end;

peržvelk tuos video ir manau paaiškės viskas :) o gal aš klystu, gal ir tavo budu galima.. nemėginau :)

Redagavo Peupeu
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tavo atveju procedūra procedūra nuskaito failą, bet kinamųjų neišsaugoja, todėl, viską ką nori išsaugoti rašyk taip :

procedure skaityk(VAR pvzbegiku kiekis : integer; var irasotipomasyvas : masyvo pavadinimas; ir t.t.)
var kintamieji kurie nebus veliau saugomi pvz i,j : integer - sukti masyvam..
begin
ka daro procedura
end;
var begiku kiekis : integer;
irasotipoas masyvas: masyvo pavadinimas...
begin
pagrindinė programa
proceduros iškvietimas
skaityk(begiku kiekis, iraso tipo masyvas) <-- siuot atveju tavo begiku kiekis ir iraso tipo masyvas igija reiksmes 
kurios išsisaugo. iškviečiant procedūra pavadinimai nebūtinai turi sutapti, tik jų tipas ir kiekis.. 
end;

peržvelk tuos video ir manau paaiškės viskas :) o gal aš klystu, gal ir tavo budu galima.. nemėginau :)

 

jau ssusitvarkiau aš ta nuskaitymą, dabar strigau ant vienos vietos. Taigi visą masyvą maždaug susirikiavau grupemis mažėjančia tvarka na, kad gautūsi taip :

post-16728-0-73737800-1365002682_thumb.jpg

bet niekaip nesugalvoju kaip atrinkt arba išmest tuos nereikalingus katinus. Gal turi idėjų?

 

Nereikia, jau pasidariau, dar karta dėkui visiems padėjusiems.

Redagavo VDabar
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš šitą uždavinį dariau tokiu principu:

  • Pasiimu vieną grupę, ją įsirašau į pagalbinį masyvą
  • Tada jį surikiuoju ir atrinktus bėgikus įrašau į atrinktųjų masyvą (pvz. grupėje yra 4 bėgikai, atrenku pirmus 2(4 div 2))
  • Tada tą pagalbinį masyvą užnulinu
  • Tą patį kartoju su kiekviena grupe
  • Tada surikiuoju atrinktų bėgikų masyvą ir išspausdinu rezultatus

 

Gal šis sprendimo būdas ir nėra pats racionaliausias, bet tuo metu tik tokį pavyko sugalvoti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

jau ssusitvarkiau aš ta nuskaitymą, dabar strigau ant vienos vietos. Taigi visą masyvą maždaug susirikiavau grupemis mažėjančia tvarka na, kad gautūsi taip :

post-16728-0-73737800-1365002682_thumb.jpg

bet niekaip nesugalvoju kaip atrinkt arba išmest tuos nereikalingus katinus. Gal turi idėjų?

 

Nereikia, jau pasidariau, dar karta dėkui visiems padėjusiems.

Įmesk savo sprendimo būdą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įmesk savo sprendimo būdą :)

labai netvarkingas pas mane, bet čia tik, kad išmokt ir ant galo užkniso viską gražiai ir tvarkinai rašyt jau :D

program varzybos;
type zmogus = record
    vardaspavarde : string[20];
    laikasmin :integer;
    laikass : integer;
    visaslaik : longint;
    grupe: integer;
    end;
zmones = array[1..50] of zmogus;
Mas = array [1..50] of integer;
var
    F     : text;
    i,N,j,d,k, elem, isviso,isvisozmoniu,rasyt,na : integer;
    zN,reikia    : Mas;
    zm,
    Atranka    : zmones;
    vrd:string[20];
    mmin,
    nsec,
    grp : integer ;


procedure skaitymas;
var
 min,sek : integer;
 vard:string[20];
begin
assign(F,'U2.txt');
reset(F);
Readln (F,N);
isviso:=0;
for i :=1 to N do
   begin
       readln (F,zN[i]);
        for j:=1 to zN[i] do
           begin
               readln(F,vard,min,sek);
               isviso:= isviso+1;
               zm[isviso].vardaspavarde := vard;
               zm[isviso].laikasmin := min;
               zm[isviso].laikass := sek;
               zm[isviso].visaslaik := zm[isviso].laikasmin*60+zm[isviso].laikass;
               zm[isviso].grupe := i;

           end;
   end;
close(F)
end;

procedure grupiurikiavimas;
begin
k:=1;

   for i := 1 to isviso do
   begin
       for j := i+1 to isviso do
        if zm[j].visaslaik < zm[i].visaslaik  then
        begin
        elem := zm[i].visaslaik  ; vrd:= zm[i].vardaspavarde; mmin:=zm[i].laikasmin ; nsec:=zm[i].laikass;  grp :=zm[i].grupe;
        zm[i].visaslaik := zm[j].visaslaik; zm[i].vardaspavarde := zm[j].vardaspavarde; zm[i].laikasmin := zm[j].laikasmin ; zm[i].laikass :=zm[j].laikass;  zm[i].grupe :=zm[j].grupe;
        zm[j].visaslaik := elem; zm[j].vardaspavarde:=vrd ; zm[j].laikasmin:=mmin  ; zm[j].laikass:=nsec ;  zm[j].grupe :=grp;
        end;

   end;


   for i := 1 to isviso do
   begin
       for j := i+1 to isviso do
        if zm[j].grupe < zm[i].grupe  then
        begin
        elem := zm[i].visaslaik  ; vrd:= zm[i].vardaspavarde; mmin:=zm[i].laikasmin ; nsec:=zm[i].laikass;  grp :=zm[i].grupe;
        zm[i].visaslaik := zm[j].visaslaik; zm[i].vardaspavarde := zm[j].vardaspavarde; zm[i].laikasmin := zm[j].laikasmin ; zm[i].laikass :=zm[j].laikass;  zm[i].grupe :=zm[j].grupe;
        zm[j].visaslaik := elem; zm[j].vardaspavarde:=vrd ; zm[j].laikasmin:=mmin  ; zm[j].laikass:=nsec ;  zm[j].grupe :=grp;
        end;

   end;



end;

procedure AtrinktiIsGrupes(kuri,kiek:integer);
begin
     k := 0;
     for i := 1 to isviso do
       Begin
            if zm[i].grupe = kuri then
              Begin
                  k := k + 1;
                  if k <= kiek then
                   Begin
                       na := na + 1;
                       Atranka[na] := zm[i];
                   end;
              end;
       end;
end;

procedure AtrinktiIsGrupiu;
var i:integer;
Begin
      for i := 1 to N do
        AtrinktiIsGrupes(i,zN[i] div 2 );
end;


procedure galutinairikiuoti;
begin
  k:=1;

   for i := 1 to isviso div 2 do
   begin
       for j := i+1 to isviso div 2 do
        if atranka[j].visaslaik < atranka[i].visaslaik  then
        begin
        elem := atranka[i].visaslaik  ; vrd:= atranka[i].vardaspavarde; mmin:=atranka[i].laikasmin ; nsec:=atranka[i].laikass;
        atranka[i].visaslaik := atranka[j].visaslaik; atranka[i].vardaspavarde := atranka[j].vardaspavarde; atranka[i].laikasmin := atranka[j].laikasmin ; atranka[i].laikass :=atranka[j].laikass;
        atranka[j].visaslaik := elem; atranka[j].vardaspavarde:=vrd ; atranka[j].laikasmin:=mmin  ; atranka[j].laikass:=nsec ;
        end;

   end;
end;

procedure rasyti;
begin
 for i:= 1 to isviso div 2  do
writeln( atranka[i].vardaspavarde,' ',atranka[i].laikasmin,' ', atranka[i].laikass,' ',atranka[i].visaslaik,' ', atranka[i].grupe);
end;

begin
skaitymas;
grupiurikiavimas;
AtrinktiIsGrupiu;
galutinairikiuoti;
rasyti;
readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

labai netvarkingas pas mane, bet čia tik, kad išmokt ir ant galo užkniso viską gražiai ir tvarkinai rašyt jau :D

Nepatinka man tos procedūros, kur be kintamųjų viduj, na bet manau čia kiekvienas kaip moka, taip daro, svarbu užduoties reikalavimus atitikti ir gauti teisingus rezultatus :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nepatinka man tos procedūros, kur be kintamųjų viduj, na bet manau čia kiekvienas kaip moka, taip daro, svarbu užduoties reikalavimus atitikti ir gauti teisingus rezultatus :)

Žinai, aš nelabai dar įsivaizduoju kaip ten tie viduj kintamieji veikia, tai labai jų vengiu. Išvis tik prieš mėnesį sugalvojau, kad info VBE laikysiu (tada tik pradėjau žiūrėt dar pagrindus) tai nelabai dar kažkoks iš manes programeris, bet jaučiu iki deadlino spėsiu perprast :D

Redagavo VDabar
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Žinai, aš nelabai dar įsivaizduoju kaip ten tie viduj kintamieji veikia, tai labai jų vengiu. Išvis tik prieš mėnesį sugalvojau, kad info VBE laikysiu (tada tik pradėjau žiūrėt dar pagrindus) tai nelabai dar kažkoks iš manes programeris, bet jaučiu iki deadlino spėsiu perprast :D

Realiai egzaminui daug mokėti nereikia:ciklai, masyvai, recordai, skaitymas, rašymas, rūšiavimas(masyvo, recordo), max ir min paieška bei atranka,funckijos,procedūros. Sunkiausia dalis sugalvot, kaip nuskaityti, kad būtų patogu atlikti kitus veiksmus, galima naudot dvimačius masyvus, bet nepatariu. Tiek manau užtektų, kad atlikti visas užduotis. Beje šiais metais bus praktinės užduotys su word'u ir excel'iu! Svarbiausia išmokti ilgai negalvojant rašyti kodą, o čia jau praktinis įgūdis, kuris pasiekiamas parašant nemažai pascal eilučių :)

Redagavo Peupeu
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Realiai egzaminui daug mokėti nereikia:ciklai, masyvai, recordai, skaitymas, rašymas, rūšiavimas(masyvo, recordo), max ir min paieška bei atranka,funckijos,procedūros. Sunkiausia dalis sugalvot, kaip nuskaityti, kad būtų patogu atlikti kitus veiksmus, galima naudot dvimačius masyvus, bet nepatariu. Tiek manau užtektų, kad atlikti visas užduotis. Beje šiais metais bus praktinės užduotys su word'u ir excel'iu! Svarbiausia išmokti ilgai negalvojant rašyti kodą, o čia jau praktinis įgūdis, kuris pasiekiamas parašant nemažai pascal eilučių :)

o gal netyčia jau pats laikęs info vbe? Kaip sekėsi? ar ilgai mokeisi egzaminui?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Esu 12 -tokas, laikysiu šiemet... Realiai gal per savaitę visko išmokau, kad galėčiau išspręsti betkokią vbę užduotį, laikas dažniausiai spaudė besprendžiant. Šiuo metu nieko nedarau, gegužę gal vėl prisėsiu prie pascalio, pirštus papratinti, o šeip karts nuo karto peržiūriu, ką buvau parašęs, kad prisimint, kas kaip rašosi. Dabar su wordu/exceliu tenka žaisti, nes mokė '03 o, egzaminas reikalauja '07 or '10 :) Pirmą pusmetį - po truputį mokėmės paskalio mokykloj, paskui teko eiti į informatikos olimpiadą, nuo to ir prasidėjo, įtraukė programavimas. Antrą pusmetį excel'y ir word'e sėdim, klasiokai taip ir neišmoko paskalio (ciklus toliausiai) ir vis žada, kad pradės rytoj... :D Pythonu programuoju kolkas :)

Redagavo Peupeu
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ą...