Pereiti prie turinio

gidasss2

Patvirtinti nariai
  • Pranešimai

    28
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    100%

gidasss2 Pranešimai

  1. Sveiki, gal būt yra čia susidūrusių su šiuo reikalu. Pirkau hostex.lt virtualų dedikuotąjį serverį (CentOS) ir man reikia kažkokiu būdu įrašyti phpmyadmin. Mysql php ir panašiai ten viskas surašyta, tik gal reikia kažkaip juos paderinti, nes dabar kai įsirašiau, tai phpmyadmin gaunu errorą: Cannot load mysql extension. Please check your PHP configuration. Iškarto dėkui už bet kokią informaciją.

     

    P.S. Naudojantis CentOS ar kitomis linuxų atmainomis aš ganėtinai žalias.

  2. Sveiki, niekaip neiseina parasyt programos kuri nuskaitytu duomenis is failo ir juos atspauzdintu. Kazkaip iki galo nenuskaito duom.txt faile esanciu duomenu, nesuprantu kas cia blogai.

     

    duom.txt failiukas:

     

    2

    4

    Lukas 7

    Gedas 10

    Rokas 10

    Adomas 12

    3

    Petras 5

    Ona 12

    Jonas 8

     

    Mano rasyta programa:

    program Bevardë2;
    type group=record
           v:string[7];
           sk:integer;
        end;
    type mas=array[1..20] of group;
    
    var i,n,m:integer; Rf,Df:text; G:mas;
    
    procedure skaitom;
    begin
    Assign(Df,'duom.txt'); Reset(Df);
    ReadLn(Df,n);
    for i:=1 to n do
    begin
    ReadLn(Df,m);
    for i:=1 to m do
    ReadLn(Df,G[i].v,G[i].sk);
    close(Df);
    end;
    end;
    
    
    begin
    skaitom;
    Assign(Rf,'rez.txt'); Rewrite(Rf);
    for i:=1 to n do
    begin
    for i:=1 to m do
    WriteLn(Rf,G[i].v,G[i].sk);
    close(Rf);
    end;
    end.
    

     

    Sukompiliaves programa, rez.txt faile gaunu atspauzdinta tik pirma grupe zmoniu ir skaiciu. Gal galetumet paziuret kas cia blogai ir ko truksta..

     

     

    Nuo kada ciklas cikle abiems ciklams turi tą patį kintamąjį "i", ir nuo kada uždarome failą pačiame cikle?

    Turiu omeny šitas vietas:

     

    for i:=1 to n do

    begin

    ReadLn(Df,m);

    for i:=1 to m do

    ReadLn(Df,G.v,G.sk);

    close(Df);

    end;

     

    Be to kad ir sutvarkysi tai, tai vistiek į masyvą kiekvieną grupę rašai vėl nuo pirmo indekso. Tai reiškia, kad liks gale nuskaitymo tik paskutinė duomenų grupė (šiuo atveju čia kažkokių vardų antra grupė)

  3. Viskas dabar man veikia, tik dabar jau kiek kita uzduoti darau :) Viskas tas pats kas cia buvo,tik kaip jau minejau anksciau atsiranda dar kelios grupes tu katinu ir velgi reikia is ju paimti puse greiciausiu :) virsuje atsiranda kintamasis k,kuris reiskia grupiu skaiciu.Ziurek, as dabar toje proceduroje, kur duomenis paskirsto didejimo tvarkoje, pridejau "for i:=1 to k do" ir tuomet ten kur yra n-katinu skaicius grupeje, ji jau sukuriau kaip masyva, nes kadangi kelios grupes, tai ir keli n, o ne vienas, todel dabar n bus n :) Kodai tokie:

    procedure atrinkimas;
    begin
       for i:=1 to k do
       begin
           for g:=1 to n[i] do
           begin
               for j:=1 to n[i]-g do
               begin
                   if (A[j].min > A[j+1].min) or (A[j].min = A[j+1].min) and (A[j].sek > A[j+1].sek ) then
                   begin
                       C:=A[j].min;
                       A[j].min:=A[j+1].min;
                       A[j+1].min:=C;
                       Temp:=A[j].vard;
                       A[j].vard:=A[j+1].vard;
                       A[j+1].vard:=Temp;
                       W:=A[j].sek;
                       A[j].sek:=A[j+1].sek;
                       A[j+1].sek:=W;
                   end;
               end;
           end;
       end;
    end;
    

    procedure Spausdinimas;
    begin
       for j:=1 to k do
       begin
           skaic[j]:=n[j] div 2;
           for i:=1 to skaic[j] do
           Writeln(Rf,A[i].vard,' ',A[i].min,' min ',A[i].sek, '  sek ');
       end;
    end;
    

    Problema yra tame, kad duomenys visiskai nesamoningi rezultatu faile, nes isspausdinami ne taip kaip reikia, dabar parodysiu duomenu failo foto:

    http://i45.tinypic.com/98857m.jpg

    O cia rezultatu failo fotke:

    http://i48.tinypic.com/2heg8zn.jpg

     

    Klaida failo nuskaityme. Kiekvieną grupę nuskaitai vėl ant tų pačių indeksų, taip kad galiausiai lieka tik paskutinė grupė. Turi sugalvoti, kaip visus duomenis išsaugoti į skirtingas vietas. Tai galima daryti įvairiai. Galima kiekvienai grupei atskirą masyvą naudoti, arba, pavyzdžiui, dėti viską į vieną masyvą, tik ne vis nuo pirmo indekso saugoti, o vis toliau ir žymėtis, nuo kelinto indekso yra kita grupė. Esminė klaida tik nuskaityme, kad vieną ant kito duomenis nuskaitai ir nebeturi pirmųjų.

  4. Supratau ta klaida jau-ziopla klaida :) Ziurek, dabar tik man isaiskink, kodel pas mane taip yra, kad mazejimo tvarka, o ne didejimo skaiciai isspausdinami? :) Kodas tai toks:

    procedure atrinkimas;
    begin
       for g:=1 to n do
       begin
           for j:=1 to n-g do
           begin
               if (A[j].min < A[j+1].min) or (A[j].min = A[j+1].min) and (A[j].sek < A[j+1].sek ) then
               begin
                   C:=A[j+1].min;
                   A[j+1].min:=A[j].min;
                   A[j].min:=C;
                   W:=A[j+1].sek;
                   A[j+1].sek:=A[j].sek;
                   A[j].sek:=W;
               end;
           end;
       end;
    end;
    
    procedure Spausdinimas;
    begin
       skaic:=n div 2;
       for i:=1 to skaic do
       Writeln(Rf,A[i].min,' min ',A[i].sek, '  sek ');
    end;
    

     

     

    Nes tu duomenis apkeiti tada, kai sekantis didesnis už buvusį. Turiu omeny šią vietą:

     

    if (A[j].min < A[j+1].min) or (A[j].min = A[j+1].min) and (A[j].sek < A[j+1].sek ) then

     

    A[j].min < A[j+1].min va pvz apkeis čia jei A[1].min bus mažesnis už A[2].min. Tiesiog varneles apsuk į kitą pusę ir problema išspręsta.

  5. procedure atrinkimas;
       var puse : integer;
    begin
    
       for g:=1 to n do //------------ 111
       begin
           for j:=1 to n-g do //------------ 2222
           begin
               if (A[j].min > A[j+1].min) or (A[j].min = A[j+1].min) and (A[j].sek > A[j+1].sek )
               then apkeitimas(j,j+1);
           end;
       end;
    
       puse:= n div 2;
       Spausdinimas(puse);
    end;

     

    Šitas rikiavimo būdas yra tokio principo:

     

    Tarkime turime 5 duomenis

     

    10 3 8 2 3

     

    Ir mums reikia surikiuoti didėjimo tvarka. Taigi panaudosime ciklą cikle. Išorinis ciklas (pavyzdyje '//------------ 111') tarsi pasako kiek skaičių reikia tikrinti, o vidinis (//------------ 2222) perrikiuoja skaičius. Vidinio ciklo esmė perkelti didžiausią skaičių į galą paeiliui lyginant 2 skaičius. Vygdome vidinį ciklą:

     

    10 3 8 2 3

     

    tikrinam pirmą ir antrą narį ir jei pirmas didesnis už antrą tada sukeičiame (šiuo atveju taip ir yra):

     

    3 10 8 2 3 (1 su 2)

     

    dabar tikriname antrą ir trečia ir vėl apkeičiame jei antras didesnis už trečią:

     

    3 8 10 2 3 (2 su 3)

    3 8 2 10 3 (3 su 4)

    3 8 2 3 10 (4 su 5)

    (4 kartai)

     

    įvykdėme vidinį ciklą, kaip matai didžiausias narys atsidūrė gale, reiškia mums nebereikia tikrinti paskutinio nario, nes mes jau žinome, kad gale yra didžiausias ir stovi ten kur jam vieta pagal sąlygą. Taigi kiek kartų įvygdėme vidinį ciklą (ta prasme pilnai įvygdėmė), tiek galime nebetikrinti paskutinių skaičių.

     

    vygdome antrą ratą vidinio ciklo (galime nebetikrinti paskutinio skaičiaus):

     

    3 8 2 3 10

     

    3 8 2 3 10 (1 su 2)

    3 2 8 3 10 (2 su 3)

    3 2 3 8 10 (3 su 4)

    (3 kartai)

     

    2 3 3 8 10 (1 su 2)

    2 3 3 8 10 (2 su 3)

    (2 kartai)

     

    2 3 3 8 10 (1 su 2)

    (1 kartas)

     

    ir viskas, kaip matai ciklų skaičius mažėja. Aišku galima kiekvieną kartą vis po 4 ciklus daryti, bet apkrausime procesorių nereikalingais veiksmais, geriau darome kodą labiau ekonomišką.

  6. Užsiiminėju šiek tiek programavimu, pascalį mokykloj išmokau.

     

    a ir b procedūroje "Apkeitimas(a,b: integer)" tėra indeksai, lyg namo adresai duomenims. Jei šeimos tarkim apsikeičia savo būstais, juk nepersineša savo adreso į naująjį būstą, o gauna adresą tokį kokį tas namas ir turėjo iki šiol.

     

    Geriausia atskirus kodo fragmentus skaidyti į atskiras procedūras. Taip kodas tampa labiau suprantamesnis ir lengviau redaguojamas (kodas pagerėja iš programavimo kultūros pusės).

  7. Pirmiausia turi pasidaryti duomenų rikiavimą, pagal tas minutes ir sekundes ir tada dalinti duomenis per pusę. (Perrašinėju dabar tau tą procedūrą, kai perrašysiu šitą postą redaguosiu ir įdėsiu savo varijantą).

     

    
    procedure Apkeitimas(a,b: integer);
       var tarpinis : integer;
    begin
       tarpinis := A[a].min;
       A[a].min := A[b].min;
       A[b].min := tarpinis;
    
       tarpinis := A[a].sek;
       A[a].sek := A[b].sek;
       A[b].sek := tarpinis;
    end;
    
    procedure Spausdinimas(sk : integer);
    begin
       for i:=1 to sk do
           Writeln(Rf,i,'. ',A[i].min,'min. ',A[i].sek, 'sek.');
    end;
    
    
    procedure atrinkimas;
       var puse : integer;
    begin
    
       for g:=1 to n do // kiek duomenų reikia sukeisti iš viso
       begin
           for j:=1 to n-g do //kurį sukeičiame (iš esmės didžiausią reikšmę nustumiame į patį galą kiekvienu ciklo pasikartojimu)
           begin
               if (A[j].min > A[j+1].min) or (A[j].min = A[j+1].min) and (A[j].sek > A[j+1].sek )
               then Apkeitimas(j,j+1); // sukeičiame duomenis jei pirmiau esantys duomenys didesni už sekuntį
           end;
       end;
    
       puse:= n div 2;
    
       Spausdinimas(puse);
    end;
    
    

     

    Paprasčiausias variantas jei gerai supratau ko reikia.

  8. Jei esi žalias tai punktas:

    "1. Tikrini inputą iki / ženklo (paimi pirmos trupmenos skaitiklį)"

    gali kelti klausimų.

     

    P.S. Derėtų prisiminti, kad ne visi čia vien tik persilaužę programuotojai renkasi. Mano idėja būtų, kad prieš prašant pagalbos programavime, žmogus parašytų ir kiek laiko mokosi programavimo. Tuomet būtų galima lengviau spręsti kaip su juo kalbėti.

  9. kiek esu susidures, mysql_fetch_row dirba leciau uz mysql_fetch_array, nes kazka esu pats susidures, kad su mysql_fetch_row dirbo letai, tai pakeitus i mysql_fetch_array, pasijuto skirtumas zymiai

     

    Nemanau kad gali būti didžiulis skirtumas, nebent duomenų kiekiai yra milžiniški. Paprasčiausiai procesai gal vienas greitesnis o kitas lėtesnis bet vistiek jie labai greiti. Mano nuomonė, nesidomėjau ir nebandžiau.

  10. $duom = mysql_query("SELECT * FROM testas WHERE kazkas='kazkas'");
    
    $n = 0;
    while ($duom = mysql_fetch_array($duom))
    {
      $n++;
      $masyvas[n] = $q['name'];
    // o jai daugiau surasinėsi duomenų tai daryk dvimatį masyvą
    //$masyvas[n]['vardas'] = $q['name'];
    //$masyvas[n]['pavarde'] = $q['surname'];
    //. . . . .
    }

     

    O poto panaudoti:

     

    echo "Pirmo darbuotojo vardas: ".$masyvas[1]['vardas'];
    echo "Pirmo darbuotojo pavarde: ".$masyvas[1]['pavarde'];
    
    echo "Antro darbuotojo vardas: ".$masyvas[2]['vardas'];
    // .. . . . ..  ir taip toliau

     

    Tikiuosi klaidos kokios neįvėliau, ką tik atsibudau. ^_^

  11. O tai palauk, kokiu tikslu atrinkti 100 ir iš jo dar 15, jei gali iškarto 15?

     

    Nu žmogus logiškai galvojo, bet ne programavimui pritaikyta logika. Jis galvojo kad reikia atrinkti 100 pagal vienus kriterijus ir poto iš to 100 dar 15 pagal kitus kriterijus. O programavime visus kriterijus surašai iškarto ir išrenki 15 rezultatų.

     

    pirmi kriterijai iš vienos lentelės ".DB_RATINGS."

    dar kitus kriterijus iš lentelės downloads

     

    Taip kad pats norėdamas gudriai padaryti padariau klaidą, nes čia iš skirtingų lentelių filtrus daro. My bad...

  12. $dow = @mysql_query("SELECT rating_item_id, rating_type, rating_datestamp, COUNT(rating_datestamp) as kiekbalsavo, COUNT(rating_datestamp) / 3 + AVG(rating_vote) as viso, AVG(rating_vote) as vidurkis from ".DB_RATINGS." WHERE rating_type='F' AND download_cat='1' AND download_submit='0' AND download_id='$rating_item_id' group by rating_item_id order by viso DESC LIMIT 0,15");

     

    Šitą vietoj pirmosios eilutės dėk, o to kito tikrinimo nereikia ir turėtų veikti manau

     

    EDIT: blogas šitas kodas...

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