Pereiti prie turinio

Mantonijo

Patvirtinti nariai
  • Pranešimai

    295
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    100%

Mantonijo Pranešimai

  1. Aaa supratau, perdariau programa. Viskas puikiai veikia ir pakeitus duomenys. Dėkui už pagalbą.

     

    Dar norėčiau paklausti, kaip reikėtų tinkamai, tarkim, šią programą sulygiuoti pagal reikalavimus?

     

    Tai yra mano rezultatų failas:

     

    34
    20
    14
    4.00
    2.80
    

     

    Kodėl prieš 4.00 ir 2.80 yra tarpas? Atsakyme nustatau :5:2.

  2. Pridejau su EDIT prie pirmo atsakymo

     

    Is tiesu tai vis tiek nesuprantu.

     

    Tarkim i:=1, tai paims num[1] ir jis nelyginis tai praleis. Paims i:=2 ir tada num[2] kuris lygus 2. K:=2 ir paims gyv[2]. Sioje uzduotyje viskas kaip ir gerai kai nuneriai eina is eiles. Jei butu ne is eiles tai tada pritariu, funkxija reiketu perdaryt

  3. 1) Del kodo kartojimosi. Tavo logikoje, namas bus desineje, jei jo numeris lyginis, ir kaireje jei nelyginis. Tad

    // lyginis kai
    num[i] mod 2 = 0
    // nelyginis kai
    num[i] mod 2 = 1
    // pastaba, mod 2 grazins 0 arba 1 ir nieko kito
    

    Naudojantis sia logika, namas bus desineje, kai x mod 2 = 0, kaireje, kai x mod 2 = 1, kur x - namo numeris.

    Tad, naudojantis mano pateikta visiGyventojaiPuseje funkcija:

    namaiDesineje:= visiGyventojaiPuseje(numeriai, gyventojai, n, 0);
    namaiKaireje:= visiGyventojaiPuseje(numeriai, gyventojai, n, 1);

     

    Aaa tiksliai pats susimaišiau!!

     

    O kaip dėl pirmos klaidos?

  4. Na, visu pirma, yra klaidu. Bet pirma, keli pastebejimai.

     

    1. Nereikalingas kodo atkartojimas. visiGyventojaiKaire/visiGyventojaiDesine ir Vidgyventojudesine/Vidgyventojukaire yra identiskas kodas, su vienu mazu skirtumu, ar tai lyginis ar nelyginis skaicius. Tad buvo galima tiesiog sukurti dvi funkcijas visiGyventojaiPuseje ir vidGyventojuPuseje, kurie priima papildoma kintamaji 'puse:integer'. Tad kodas galejo buti, kazkas pan:

    function visiGyventojaiPuseje(num, gyv: Mas; n, puse: integer): integer;
     var
       i, visiGyventojai: integer;
    
     begin
       visiGyventojai:= 0;
       for i := 1 to n do
         if num[i] mod 2 = puse then
           visiGyventojai := visiGyventojai + gyv[i];
    
       visiGyventojaiPuseje := visiGyventojai;
     end;

     

    2. Nezinau koks mokykloje/pascal yra siulomas standartas, taciau pas tave daug yra vienos eilutes for/if bloku, kuriuos galima uzrasyti ir be begin ... end; (kaip pavyzdyje virsuj)

     

    Klaidos:

    1. visiGyventojaiKaire/visiGyventojaiDesine - nereikalingas ir klaidingas kintamojo 'k' naudojimas.Yra suluzes. Tavo kode

    k := num[i];
    visiGyventojai := visiGyventojai + gyv[k];

    Turetu buti

    visiGyventojai := visiGyventojai + gyv[i];

    Kodel: imkim tavo duomenis

    1 5
    2 4
    3 4

    Kas sukuria du masyvus su:

    namai: [1]=1, [2]=2, [3]=3
    zmones: [1]=5, [2]=4, [3]=4
    

    Tavo kodas siuo atveju neluzta, nes namo 'numeris' atitinka index'a, kuriame yra aprasyta gyventoju kiekis tame name, taciau esant duomenim:

    1 5
    6 4
    3 4
    

    Antrame ciklo rate, k bus 6, taciau tokio index'o gyventoju masyve nera ir programa nebeveikia.

     

    2. vidGyventoju

    Vidgyventoju:=vidurkis div n; => Vidgyventoju:=vidurkis div daliklis;

    Ir uzmirsai nustatyti daliklis:=0;

     

    3. vidGyventojuKaire/Desine - ta pati klaida su 'k'

     

     

    Nezinau ar cia klaida, kai kopijuoji i uzdarbius, bet dabartine kodo lygiuoti yra paini ir daznai neaisku kur prasideda/pasibaigia kodo blokas bei kam jis priklauso.

     

     

    Dėkui, kad pasiryžai padėti. Tačiau nelabai suprantu pirmo pastebėjimo esmės. Ką pagal tave reikėtų įrašyt vietoj 'puse'? Ir nesuprantu gali gautis jos atsakymas 0 arba per kablelį.

     

    Dėl 2 pastebėjimo su tavim sutinku, mano klaida.

     

    Dėl 1 klaidos nelabai suprantu. Atsakymai gaunasi gerai, tai vadinasi funkcija nėra sulūžus ar ne taip?

     

    Dėl 3 klaidos taipogi nesuprantu.

  5. Sukūriau programą, kurios tikslas aprašytas Rašymas procedūroje. Kaip vertinate? Gal yra kokių pasiūlymų

    program gyventojai1;
    type Mas = array [1..100] of integer;
    
    procedure Skaitymas(var numeriai:Mas; var gyventojai:Mas; var n:integer);
    var i : integer; /// Skaitikliai
       F : text;
    
       begin
           Assign(F, 'U1.txt');
           Reset(F);
           ReadLn(F, n);
    
               for i:=1 to n do
                   begin
                   Read(F, numeriai[i]);
                   Read(F, gyventojai[i]);
                   // WriteLn(R, numeriai[i], ' ', gyventojai[i]);
                   end;
    
            Close(F);
       end;
    
    /////////////////////////
    
    function visiGyventojai(gyv:Mas; n:integer) : integer;
    var i, Visi: integer;
    
    
       begin
       Visi:=0;
           for i:= 1 to n do
               begin
               Visi:=Visi + gyv[i];
               end;
           visiGyventojai:=Visi;
       end;
    
    /////////////////////////
    
    function visiGyventojaiDesine(num:Mas; gyv:Mas; n:integer) : integer;
    var i, visiGyventojai, k: integer;
    
    begin
       visiGyventojai:=0;
               for i:= 1 to n do
                   begin
                   if num[i] mod 2 = 0 then
                       begin
                       k:=num[i];
                       visiGyventojai:= visiGyventojai + gyv[k];
                       end;
    
           end;
           visiGyventojaiDesine:= visiGyventojai;
         end;
    
    /////////////////////////
    
    function visiGyventojaiKaire(num:Mas; gyv:Mas; n:integer) : integer;
    var i, visiGyventojai, k : integer;
    
    begin
       visiGyventojai:=0;
               for i:= 1 to n do
                   begin
                   if num[i] mod 2 <> 0 then
                       begin
                       k:=num[i];
                       visiGyventojai:= visiGyventojai + gyv[k];
                       end;
    
           end;
           visiGyventojaiKaire:= visiGyventojai;
         end;
    
    ////////////////////////
    
    function vidGyventoju(gyv:Mas; n:integer) : integer;
    var i, vidurkis, daliklis : integer;
    
    
       begin
       vidurkis:=0;
           for i:= 1 to n do
               begin
               vidurkis:=vidurkis + gyv[i];
               daliklis:= daliklis + 1;
               end;
               Vidgyventoju:=vidurkis div n;
       end;
    
    /////////////////////////
    
    function vidGyventojuDesine(gyv:Mas; num:Mas; n:integer) : real;
    var i, daliklis, k, vidurkispuse: integer;
    
       begin
       vidurkispuse:=0;
       daliklis:=0;
               for i:= 1 to n do
                   begin
                   if num[i] mod 2 = 0 then
                       begin
                       k:=num[i];
                       vidurkispuse:= vidurkispuse + gyv[k];
                       daliklis:= daliklis + 1;
                       end;
    
           end;
           Vidgyventojudesine:= vidurkispuse / daliklis;
         end;
    /////////////////////////
    
    function vidGyventojuKaire(gyv:Mas; num:Mas; n:integer) : real;
    var i, daliklis, k, vidurkispuse: integer;
    
       begin
       vidurkispuse:=0;
       daliklis:=0;
               for i:= 1 to n do
                   begin
                   if num[i] mod 2 <> 0 then
                       begin
                       k:=num[i];
                       vidurkispuse:= vidurkispuse + gyv[k];
                       daliklis:= daliklis + 1;
                       end;
    
           end;
           Vidgyventojukaire:= vidurkispuse / daliklis;
         end;
    
    /////////////////////////
    
    procedure Rasymas(numeriai:Mas; gyventojai:Mas; n:integer);
    var VidurkisDesine, VidurkisKaire : real;
       Kaire, Desine, AllGyventojai : integer;
       R : text;
    
       begin
    
       Assign(R, 'U1rez.txt');
       Rewrite(R);
    
           /////////// Skaièiavimai
    
           Skaitymas(numeriai, gyventojai, n);    /// Nuskaito duomenys á masyvus
           AllGyventojai:= visiGyventojai(gyventojai, n); /// Suranda gyventojø skaièiø
           Kaire:=visiGyventojaiKaire(numeriai, gyventojai, n); /// Suranda gyventojø skaièiø kairëje
           Desine:=visiGyventojaiDesine(numeriai, gyventojai, n); /// Suranda gyventojø skaièiø deðinëje
           VidurkisDesine:=Vidgyventojudesine(gyventojai, numeriai, n); /// Suranda vid. gyventojø skaièiø deðinëje
           VidurkisKaire:=Vidgyventojukaire(gyventojai, numeriai, n);  /// Suranda vid. gyventojø skaièiø kairëje
    
           ////////// Spausdinimas
    
           WriteLn(R, AllGyventojai);
           WriteLn(R, Kaire);
           WriteLn(R, Desine);
           WriteLn(R, VidurkisKaire:5:2);
           WriteLn(R, VidurkisDesine:5:2);
    
       Close(R);
     end;
    
    var numeriai, gyventojai : Mas;
       n : integer;
    
    begin
    
    Skaitymas(numeriai, gyventojai, n);
    Rasymas(numeriai, gyventojai, n);
    
       end.

    ?

  6. Aciu, bet mokaus dar mokykloje ir tiek dar nesu pazanges :D

    iskelk

    Vidgyventojupuse:= vidurkispuse div daliklis;

    is for ciklo.

     

    Beje, cia kaip sidenote, bet ziuriu, tu tikiesi is Vidgyventojupuse 'real' tipo atsakymo. Taciau, tu naudoji 'div', kai bandai surasti vidurki, kuris grazina rezultata be liekanos. Tad, del kodo tikslumo, reiktu arba nurodyt, kad grazinsi integer arba dalyba daryti naudojant '/':

    Vidgyventojupuse:= vidurkispuse / daliklis;
    

     

    EDIT: turejau laisvesnio laiko ir supaprastinau tavo koda

    program project1;
    
    type
     MultiMas = array of array of integer;
    
    var
     namai: MultiMas;
     vidurkis: real;
    
     procedure Skaitymas(failas: string);
     var
       i, n: integer;
       F: Text;
     begin
       Assign(F, failas);
       Reset(F);
    
       ReadLn(F, n);
       SetLength(namai, n, 2);
    
       for i := 0 to n - 1 do
         ReadLn(F, namai[i, 0], namai[i, 1]);
    
       Close(F);
     end;
    
     procedure Rasymas(failas, prefix: string);
     var
       F: Text;
     begin
       Assign(F, failas);
       Rewrite(F);
       WriteLn(F, prefix, vidurkis: 5: 2);
       Close(F);
     end;
    
     function getVidurkis(namai: MultiMas): real;
     var
       i, namu, gyventoju: integer;
     begin
       namu := 0;
       gyventoju := 0;
    
       for i := 0 to Length(namai) - 1 do
       begin
         if namai[i, 0] mod 2 = 0 then
         begin
           namu := namu + 1;
           gyventoju := gyventoju + namai[i, 1];
         end;
       end;
    
       getVidurkis := gyventoju / namu;
     end;
    
    begin
     Skaitymas('U1.txt');
     vidurkis := getVidurkis(namai);
     Rasymas('U1rez.txt', 'Gyventoju vidurkis:');
    end.

  7. Tikslas suskaiciuoti vidutini gyventoju skaiciu namuose, kuriu numeris yra lyginis

    Problema kita:

     

    Division by zero

     

    Jeigu funkcijoje apsirasau, kad daliklis:= 0 tai meta si error'a nors turetu dalinti is 5.

    Jeigu funkcijoje apsirasau, kad daliklis:= 1 tai nemeta error'o, bet man turi dalinti is 5, o ne is 6.

     

    program gyventojai1;
    type Mas = array [1..100] of integer;
    
    procedure Skaitymas(var numeriai:Mas; var gyventojai:Mas; var n:integer);
    var i : integer; /// Skaitikliai
       F : text;
    
       begin
           Assign(F, 'U1.txt');
           Reset(F);
           ReadLn(F, n);
    
               for i:=1 to n do
                   begin
                   Read(F, numeriai[i]);
                   Read(F, gyventojai[i]);
                   // WriteLn(R, numeriai[i], ' ', gyventojai[i]);
                   end;
    
            Close(F);
       end;
    
    /////////////////////////
    
    function Vidgyventoju(gyv:Mas; n:integer) : real;
    var i, vidurkis, daliklis : integer;
    
    
       begin
       vidurkis:=0;
           for i:= 1 to n do
               begin
               vidurkis:=vidurkis + gyv[i];
               daliklis:= daliklis + 1;
               end;
               Vidgyventoju:=vidurkis div n;
       end;
    
    /////////////////////////
    
    function Vidgyventojupuse(gyv:Mas; num:Mas; n:integer) : real;
    var i, daliklis, k, vidurkispuse: integer;
       R : text;
    
       begin
       Assign(R, 'U1rez.txt');
       Rewrite(R);
       vidurkispuse:=0;
       daliklis:=1;
               for i:= 1 to n do
                   begin
                   if num[i] mod 2 = 0 then
                       begin
                       k:=num[i];
                       vidurkispuse:= vidurkispuse + gyv[k];
                       daliklis:= daliklis + 1;
                       WriteLn(R, vidurkispuse, ' ', daliklis, ' ', k);
                       end;
                   Vidgyventojupuse:= vidurkispuse div daliklis;
           end;
           Close(R);
         end;
    /////////////////////////
    
       var numeriai, gyventojai: Mas;
           n, k : integer;
           Vidurkis : real;
           R : text;
    
       begin
    
           Skaitymas(numeriai, gyventojai, n);
           Vidurkis:=Vidgyventojupuse(gyventojai, numeriai, n);
    
       end.

  8. Jau pasidariau, isejo :)

     

    program gyventojai1;
    type Mas = array [1..100] of integer;
    
    procedure Skaitymas(var numeriai:Mas; var gyventojai:Mas; var n:integer);
    var i : integer; /// Skaitikliai
       F : text;
    
       begin
           Assign(F, 'U1.txt');
           Reset(F);
           ReadLn(F, n);
    
               for i:=1 to n do
                   begin
                   Read(F, numeriai[i]);
                   Read(F, gyventojai[i]);
                   // WriteLn(R, numeriai[i], ' ', gyventojai[i]);
                   end;
    
            Close(F);
       end;
    
    /////////////////////////
    
    function Vidgyventoju(gyv:Mas; n:integer) : real;
    var i, vidurkis, daliklis : integer;
    
    
       begin
       vidurkis:=0;
           for i:= 1 to n do
               begin
               vidurkis:=vidurkis + gyv[i];
               daliklis:= daliklis + 1;
               end;
               Vidgyventoju:=vidurkis div n;
       end;
    
    /////////////////////////
    
       var numeriai, gyventojai: Mas;
           n : integer;
           Vidurkis : real;
           R : text;
    
       begin
    
       Assign(R, 'U1rez.txt');
       Rewrite(R);
    
           Skaitymas(numeriai, gyventojai, n);
           Vidurkis:=Vidgyventoju(gyventojai, n);
           WriteLn(R, Vidurkis:5:2);
    
       Close(R);
       end.

  9. Beda, kad atsakymas 0. Nesuprantu kame problema.

     

     

     

    program gyventojai1;
    type Mas = array [1..100] of integer;
    
    procedure Skaitymas(var numeriai:Mas; var gyventojai:Mas; n:integer);
    var i : integer; /// Skaitikliai
       F : text;
    
       begin
           Assign(F, 'U1.txt');
           Reset(F);
           ReadLn(F, n);
    
               for i:=1 to n do
                   begin
                   Read(F, numeriai[i]);
                   Read(F, gyventojai[i]);
                   // WriteLn(R, numeriai[i], ' ', gyventojai[i]);
                   end;
    
           Close(F);
    
       end;
    
    /////////////////////////
    
    function Vidgyventoju(gyv:Mas; m:integer) : real;
    var i, vidurkis, vid, k : integer;
    
       begin
    
           for i:= 1 to m do
               begin
               vidurkis:= vidurkis + gyv[i];
               end;
               vid:=vidurkis div 10;
               Vidgyventoju:=vid;
    
       end;
    
    /////////////////////////
    
    function Vidgyventojupuse(num:Mas; gyve:Mas; k:integer) : real;
    var i, vidurkisd: integer;
       vidd : real;
    
       begin
           for i:= 1 to k do
               begin
                   if num[k] mod 2 = 0 then
                       begin
                       vidurkisd:=vidurkisd + gyve[k];
                       end;
                       vidd:= vidurkisd div k;
                       Vidgyventojupuse:=vidd;
    
                   end;
                   end;
    /////////////////////////
    
       var numeriai: Mas;
           gyventojai: Mas;
           n, k : integer;
           Vidurkis : real;
           R : text;
    
       begin
    
       Assign(R, 'U1rez.txt');
       Rewrite(R);
    
       Skaitymas(numeriai, gyventojai, n);
       Vidurkis:=Vidgyventojupuse(numeriai, gyventojai, n);
       WriteLn(R, Vidurkis:5:2);
    
       Close(R);
       end.

     

    Duomenys:

     

    10
    1 5
    2 4
    3 4
    4 5
    5 6
    6 5
    7 0
    8 0
    9 5
    10 0

  10. Problema:

     

    Syntax error, . expected but , found

     

    Niekaip nesurandu?

    Jeigu ivedu, kad gyventojai:Mas tai meta:

     

    Duplicate identifier GYVENTOJAI

    Identifier already defined in gyventojai.pas at line 2

    Syntax error, . expected but , found

     

    KAME SAKNYS?

     

    program gyventojai;
    type Mas = array [1..100] of integer;
    
    procedure Skaitymas(numeriai:Mas; gyventojai:Mas; n:integer);
    var i : integer; /// Skaitikliai
       F, R : text;
    
       begin
           Assign(F, 'U1.txt');
           Reset(F);
           Assign (R, 'U1rez.txt');
           Rewrite(R);
           Read(F, n);
    
               for i:=1 to n do
                   begin
                   ReadLn(F, numeriai[i]);
                   WriteLn(R, numeriai[i]);
                   end;
    
               for i:=1 to n do
                   begin
                   ReadLn(F, gyventojai[i]);
                   WriteLn(R, gyventojai[i]);
                   end;
    
           Close(F);
           Close(R);
       end;
    
       var numeriai: Mas;
           n : integer;
    
       begin
    
       Skaitymas(numeriai, gyventojai, n);
    
       end.

  11. Na, pasirinkimo pilna siais laikais, tik reikia moketi tinkamai issirinkti. Siaip, jei domina, tai patarciau pasidometi apie RDP/VPS, SSH tunelius, bei paprasciausius Socks5. Be visa to, enkryptink savo harda ir naudokis papildomu (be kontraktu) arba nulauztu internetu, tai galesi, kad ir su ponu Bin Laden'u bendrauti.

    O is esmes, nera tokio dalyko, kaip 100% anonimiskas. Gali sleptis po VPN'ais, RDP'ais ir t.t., vistiek tave iskas is po zemiu, jei busi to vertas.

     

    Gerbiamas kolega, noreciau paklausti, ka reiskia tas "nulauztas internetas". Tu kalbi apie isilauzima i tarkim kaimyno interneta? Bet ar tai legalu? RDP/VPS puikiai zinau kas yra. Apie SSH esu girdejes bet ar jis tikrai efektyvus ir ar verta pradeti dometis? Gal tisiog likti prie klasikinio rdp arba vpn.

     

    Klausimas kitas. Koks jusu manymu saugiausias vpn ar sunku pasakyti? Gal turite kokiu favoritu?

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