Pereiti prie turinio

Informaciniu technologijų VBE 2011 užduotis "Šokiai"


Rekomenduojami pranešimai

Sveiki. Iškilo problemėlė. Sumąsščiau parašyti programą "Šokiai" besiruošiant poryt vyksiančiam egzaminui, tačiau vis nepavyksta jos parašyti. Sąlyga čia: http://www.nec.lt/failai/2062_IT-VBE-1_2011.pdf (18 puslapis programa "Šokiai"). Jau sužinojau, kad čia yra įsivėlusi klaida duomenų faile, kur pirmasis skaičius turėtų būti ne 5, o 3(nes tik 3 poros), tačiau pataisius šią NEC padarytą klaidą vis tiek meta klaidą "Blogas skaičiaus formatas". taigi, gal galite bent padėti parašyti programos nuskaitymą? Būčiau labai, labai dėkingas. Mano programa:

 

program Bevardë3;

type sokiai = record
      vardas : string[20];
      balaiTech,
      balaiArt,
      bendriBalai : integer;
    end;

type mas = array [1..100] of sokiai;

  var M : mas;
      n : integer;

procedure nuskaitymas;
  var i, j, a, b, k : integer;
      f1 : text;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n, k);
  for i := 1 to n do
    begin
      readln(f1, M[i].vardas);
      for j := 1 to k do
         readln(f1, M[i].balaitech); // TIES ŠIA EILUTE PROGRAMA SUSTOJA
      readln(f1);
      for j := 1 to k do
         readln(f1, M[i].balaiArt);
      readln(f1);
    end;
end;

begin
 nuskaitymas;

 Readln;
end.

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Blogai panaudojai readln - nuskaito visą eilutė, reik naudoti read - nuskaito iš eilės eilutę.

procedure nuskaitymas;
  var i, j, a, b, k : integer;
  	f1 : text;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n, k);
  for i := 1 to n do
	begin
  	readln(f1, M[i].vardas);
  	writeln(M[i].vardas);
  	for j := 1 to k do
  	begin
       	read(f1, M[i].balaitech); // TIES ŠIA EILUTE PROGRAMA SUSTOJA
       	write(M[i].balaitech);
  	end;
  	readln(F1);
  	writeln;
  	for j := 1 to k do
  	begin
       	read(f1, M[i].balaiArt);
       	write(M[i].balaiArt);
  	end;
  	writeln;
  	readln(F1);
	end;
end;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai vat. Dariau dabar dar vieną programą, bet visiškai nesąmones man išveda. Programava vadinasi "Pirštinės"(http://nec.lt/failai/2062_IT-VBE-1_2011.pdf , 18 puslapis). Mano kodas:

program pirstines2;

type mas = array [1..100] of integer;

  var VK, VD, MK, MD : mas;
      n : integer;

procedure nuskaitymas;
  var f1 : text;
      i, j, d, l, r : integer;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n);
  for i := 1 to n do
    begin
      readln(f1, l, r, d);
      if l = 4
        then if r = 1
          then MK[d] := MK[d] + 1
          else MD[d] := MD[d] + 1;
      if l = 3
        then if r = 1
          then VK[d] := VK[d] + 1
          else VD[d] := VD[d] + 1;
    end;
  close(f1);
end;

function kiekPoru(Kr, Dr : mas) : integer;
  var sum, i : integer;
begin
  sum := 0;
  for i := 1 to 100 do
    begin
      if (Kr[i] > 0) and (Dr[i] > 0)
         then if Kr[i] < Dr[i]
            then sum := sum + Kr[i]
            else sum := sum + Dr[i];
    end;
  kiekPoru := sum;
end;

function likusios (Kr, Dr : mas) : integer;
  var i, viso : integer;
begin
  viso := 0;
  for i := 1 to 100 do
    viso := viso + Kr[i] + Dr[i];
  likusios := viso;
end;

procedure isvedimas;
  var f2 : text;
      i  : integer;
      Kr, Dr : mas;
begin
  assign(f2, 'rez.txt');
  rewrite(f2);
  writeln(f2, MK[i], MD[i]);
  writeln(f2, VK[i], VD[i]);
  writeln(f2, Kr[i], Dr[i]);
  close(f2);
end;

  var m, v, mo, vr : integer;
begin
 nuskaitymas;
 isvedimas;
end.

 

Gal žinote, kas jai blogai? Aš asmeniškai galvoju, kad mano išvedimas klaidingas, bet nežinau, kaip pataisyti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tavo išvedimas blogas ir apskaičiavimą lengvesnį galimą pasidaryt..

program pirstines2;

type mas = array [1..100] of integer;

  var VK, VD, MK, MD : mas;
  	n,m,v: integer;

procedure nuskaitymas;
  var f1 : text;
  	i, j, d, l, r : integer;
begin
m:=0; v:=0;
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n);
  for i := 1 to n do
	begin
  	readln(f1, l, r, d);
  	if l = 4
    	then
       	begin
           	m:=m+1;
           	if r = 1
           	then MK[d] := MK[d] + 1
           	else MD[d] := MD[d] + 1;
       	end;
  	if l = 3
    	then
       	begin
           	v:=v+1;
           	if r = 1
           	then VK[d] := VK[d] + 1
           	else VD[d] := VD[d] + 1;
       	end;
	end;
  close(f1);
end;

function kiekPoru(Kr, Dr : mas) : integer;
  var sum, i : integer;
begin
  sum := 0;
  for i := 1 to 100 do
	begin
  	if (Kr[i] > 0) and (Dr[i] > 0)
     	then if Kr[i] < Dr[i]
        	then sum := sum + Kr[i]
        	else sum := sum + Dr[i];
	end;
  kiekPoru := sum;
end;

function likusios(m:integer; Kr, Dr : mas) : integer;
begin
likusios:=m-(2*kiekPoru(MK,MD)); //Apskaičiavimas žinome kiek buvo pirštinių ir žinome kiek turime porų porą sudaro dvi pirštinės.
end;

procedure isvedimas;
  var f2 : text;
  	i  : integer;
  	Kr, Dr : mas;
begin
  assign(f2, 'rez.txt');
  rewrite(f2);
  writeln(kiekPoru(MK,MD));
  writeln(kiekPoru(VK,VD));
  writeln(likusios(m,MK,MD));
  writeln(likusios(v,VK,VD));
  close(f2);
end;

begin
 nuskaitymas;
 isvedimas;
 readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cia tikrai visas kodas? Paskalio praktiskai nesimokinau isvis, galbut nezinau, bet kur pagrindinei f-joj kreipiniai i kitas funkcijas? nes matau tik i skaityma ir isvedima. Isvedimas irgi kazkoks, isvedi masyvo i-taja reiksme, nors i lygu niekam, tiktais aprasytas tik kintamasis. Cia gal paskali taip vyksta nezinau, jeigu kvailos mintys prasau pataisykit ;D mokykloj su c++ programuojam.

EDIT: Kol rasiau zinute pataise tavo programa, tai dabar lyg ir viskas aisku, kreipiniai is isvedimo f-jos eina :) is tavo pirmo kodo tai ten neaisku niekas kaip vyksta ;D

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cia tikrai visas kodas? Paskalio praktiskai nesimokinau isvis, galbut nezinau, bet kur pagrindinei f-joj kreipiniai i kitas funkcijas? nes matau tik i skaityma ir isvedima. Isvedimas irgi kazkoks, isvedi masyvo i-taja reiksme, nors i lygu niekam, tiktais aprasytas tik kintamasis. Cia gal paskali taip vyksta nezinau, jeigu kvailos mintys prasau pataisykit ;D mokykloj su c++ programuojam.

 

Visas kodas čia, matai čia nevisiškai teisingai rašoma, turėtu būti naudojame neglobalų kintamieji visur procedūroje ir funkcijoje ir programoje o lokalūs.

 

O taip viskas gerai, į procedūras, funkcijas, gali kreiptis bet kurioje kitoje funkcijoje, procedūroje esančiose žemiau. Pati programa yra pačiam gale

 

begin
 nuskaitymas;
 isvedimas;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visas kodas čia, matai čia nevisiškai teisingai rašoma, turėtu būti naudojame neglobalų kintamieji visur procedūroje ir funkcijoje ir programoje o lokalūs.

 

O taip viskas gerai, į procedūras, funkcijas, gali kreiptis bet kurioje kitoje funkcijoje, procedūroje esančiose žemiau. Pati programa yra pačiam gale

 

begin
 nuskaitymas;
 isvedimas;
end.

Matai dar gi ir globalus cia kintamieji :) nepastebejau net. Kai c++ programuojam, tai visos funkcijos eina zemiau pagrindines, tiktais deklaruojam pries tai, tai todel ir kreipiniu is maino reik i jas (aisku jei viena i kita nesikreipia, nes tokiu atveju nebutinai). Nesu bandes visa procedura uzrasyt auksciau pagrindines, nezinau kaip tada veikia :D Paskali kaip suprantu tai prasisuka viskas is eiles.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matai dar gi ir globalus cia kintamieji :) nepastebejau net. Kai c++ programuojam, tai visos funkcijos eina zemiau pagrindines, tiktais deklaruojam pries tai, tai todel ir kreipiniu is maino reik i jas (aisku jei viena i kita nesikreipia, nes tokiu atveju nebutinai). Nesu bandes visa procedura uzrasyt auksciau pagrindines, nezinau kaip tada veikia :D Paskali kaip suprantu tai prasisuka viskas is eiles.

 

Tokia struktūra yra

 

program pavadinimas
//Aprašomi masyvai, įrašai t.t.
type mas=array[1..xxx] of integer

//Toliau eina procedūros, funkcijos, jei į jas kreipsis kitą tai į kurią kreipsis rašoma aukščiau iš kurios kreipiamasis.
function Funkcija(a,b:integer):integer;
begin
//kažkas
end;

procedure Procedura(a,b:integer);
begin
//kreipiamės į funkciją jei reik
Funkcija(a,b);
end;

//Toliau eina pati programa
var a,b:integer; //aprašomi kintamieji.

begin
//Kreipiamės į procedūrą.
Procedura(a,b);
end;

 

Nuo c++ nemažai skiriasi pascal.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tokia struktūra yra

 

program pavadinimas
//Aprašomi masyvai, įrašai t.t.
type mas=array[1..xxx] of integer

//Toliau eina procedūros, funkcijos, jei į jas kreipsis kitą tai į kurią kreipsis rašoma aukščiau iš kurios kreipiamasis.
function Funkcija(a,b:integer):integer;
begin
//kažkas
end;

procedure Procedura(a,b:integer);
begin
//kreipiamės į funkciją jei reik
Funkcija(a,b);
end;

//Toliau eina pati programa
var a,b:integer; //aprašomi kintamieji.

begin
//Kreipiamės į procedūrą.
Procedura(a,b);
end;

 

Nuo c++ nemažai skiriasi pascal.

o tai jeigu pvz apsirasyciau globaluju kintamaji X = 5, tada funkcija, kuri prie X prides vieneta, ir tada pagrindinei funkcijoj (programoj) paprasyciau atspausdint X, be kreipinio i ta funkcija, tai spausdintu 5 ar 6?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

o tai jeigu pvz apsirasyciau globaluju kintamaji X = 5, tada funkcija, kuri prie X prides vieneta, ir tada pagrindinei funkcijoj (programoj) paprasyciau atspausdint X, be kreipinio i ta funkcija, tai spausdintu 5 ar 6?

 

Pascal funkcija tik vieną reikšme gražina, šiuo atveju su funkcija taip neina su ja bus taip

var x;

x:=5;

function Sudetis(a:integer;):integer;
begin
Sudetis:=a+1;
end;

//tada kreipiamės į funkciją.
writeln(Sudetis(x)); //Ji atspausdins x+1; t.y 6 pačio x reikšme nepakeičia.
//Norint pakeisti darom taip
x:=Sudetis(x);

O su procedure kitaip


var x;

x:=5;

proceudre Sudetis(var a:integer;);
begin
a:=a+1;
end;

//Kreipiamės į procedūrą
Sudėtis(x); //ir tada pakeičia reikšmę x bus 6, o jei proceduroje nebus žodelio var tada reikšmė nesikeičia.

 

Galima kreiptis ir kitaip

procedure Sudetis;
begin
x:=x+1;
end;

//tada
Sudetis; //ir pakeičia reikšme.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pascal funkcija tik vieną reikšme gražina, šiuo atveju su funkcija taip neina su ja bus taip

var x;

x:=5;

function Sudetis(a:integer;):integer;
begin
Sudetis:=a+1;
end;

//tada kreipiamės į funkciją.
writeln(Sudetis(x)); //Ji atspausdins x+1; t.y 6 pačio x reikšme nepakeičia.
//Norint pakeisti darom taip
x:=Sudetis(x);

O su procedure kitaip


var x;

x:=5;

proceudre Sudetis(var a:integer;);
begin
a:=a+1;
end;

//Kreipiamės į procedūrą
Sudėtis(x); //ir tada pakeičia reikšmę x bus 6, o jei proceduroje nebus žodelio var tada reikšmė nesikeičia.

 

Galima kreiptis ir kitaip

procedure Sudetis;
begin
x:=x+1;
end;

//tada
Sudetis; //ir pakeičia reikšme.

O jeigu mano programa tokia

var i : integer

Procedure Keitimas ();
begin
i:= i*5;
end;

begin
Writeln(i);
end.

 

tai ta mano procedura dabar pakeis mano i (globalia) reiksme, ar visgi reik programoj dar dadet Keitimas;?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O jeigu mano programa tokia

var i : integer

Procedure Keitimas ();
begin
i:= i*5;
end;

begin
Writeln(i);
end.

 

tai ta mano procedura dabar pakeis mano i (globalia) reiksme, ar visgi reik programoj dar dadet Keitimas;?

 

Nepakeis, nes nesikreipi į procedura..

program Bevardė5;
var i : integer;

procedure Keitimas();
begin
i:= i*5;
end;

begin
i:=5;
Writeln(i);
end.

 

Pakeis.

program Bevardė5;
var i : integer;

procedure Keitimas();
begin
i:= i*5;
end;

begin
i:=5;
Keitimas();
Writeln(i);
end.

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kaip ir priklauso tada :D Kazkaip po tos netaisiklingos programos ir pacios programos strukturos paskali buvau susiglumines, galvojau gal proceduros/funkcijos su globaliais kintamaisiais suveikia bet kokiu atveju, i jas kreiptasi ar ne :)

 

Būtina kreiptis, tik ten buvo šiek tiek kitaip, kreipiamasis buvo iš kitų procedūrų todėl taip ir atrodė.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Būtina kreiptis, tik ten buvo šiek tiek kitaip, kreipiamasis buvo iš kitų procedūrų todėl taip ir atrodė.

Autoriaus programoj nebuvo nei vieno kreipimosi i proceduras apart is programos i skaityma/isvedima, o nei vienas, nei kitas i daugiau ka nesikreipe :)

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.

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