Pereiti prie turinio

Haliucinas

Nariai
  • Pranešimai

    26
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    0%

Haliucinas Pranešimai

  1. C++11 standartas turi savo konteinerį enkapsuliuojantį masyvus. Dėl jo panaudojimo manau neturėtų bėdų kilt, bet jei savo nori rašyt tai vienas iš būdų būtų:

    struct Krepsinis {
    int n;
    int* k;
    int* t;
    int laik;
    int blaik;
    int* bL;
    
    Krepsinis(const int& n) {
    	this->n = n;
    	k = new int[n];
    	t = new int[n];
    	bL = new int[n];
    }
    
    ~Krepsinis() {
    	delete[] k;
    	delete[] t;
    	delete[] bL;
    }
    };

  2. //Dalele, nukeliautas atstumas
    #include <iostream>
    #include <cstdlib>
    #include <iomanip>
    #include <cmath>
    #include <fstream>
    #include <climits>
    
    using namespace std;
    
    int main() {
       system("chcp 1257");
       int m,n;
       double x1, y1, x2, y2, s, z, ab, speed, minSpeed, maxSpeed, avgSpeed;
       maxSpeed = avgSpeed = s = 0;
       minSpeed = INT_MAX;
       ifstream fd("Duomenys.txt");
       ofstream fr("rezultatai.txt");
       fd >> m;
       fd >> n;
       fd >> x1 >> y1;
       for (int i = 1; i < m; ++i) {
           fd >> x2 >> y2;
           ab = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
           speed = ab / n;
           if (speed > maxSpeed) maxSpeed = speed;
           if (speed < minSpeed) minSpeed = speed;
           s += ab;
           x1 = x2;
           y1 = y2;
       }
       avgSpeed = s/((m-1)*n);
       fr << fixed << setprecision(2) << minSpeed << endl;
       fr << fixed << setprecision(2) << avgSpeed << endl;
       fr << fixed << setprecision(2) << maxSpeed << endl;
       fr << fixed << setprecision(2) << s << endl;
       fd.close();
       fr.close();
    
       return 0;
    }

  3. Tai čia sprendimas trivialus, yra n+k būtų padaryt praktiškai tą patį. Vienas iš kitokių kelių, vietoj bool'o galėjai panaudotos pirštinės numerius nuliais užpildyt ir jos nebeskaičiuotų. Tas bool'as šiuo atvėju kaip flagas nurodantis, praleist pirštinę jei su ja pora jau sudaryta.

  4. Bandyk taip:

    Pridėk į struktūrą naują kintamąjį

    struct Pirstines {
     //failo skaitymui
     int Sk1; // Vieta pirmam skaičiui iš failo
     int Sk2; // antram skaičiui
     int Sk3; // trečiam skaičiui
     bool used;
    };

    Skaityme visur jį inicializuok

    for(int i = 0; i < n; i ++) {
     fd >> A[i].Sk1 >> A[i].Sk2 >> A[i].Sk3;
     A[i].used = false;
    }

    Ir tikrinant poras, jau panadotas išmesk

    if(A[i].Sk3 == A[j].Sk3 && A[i].Sk1 == m && A[j].Sk1 == m && A[i].Sk2 != A[j].Sk2 && (!A[i].used && !A[j].used)) {
     b++;
     A[i].used = true;
     A[j].used = true;
     break;
    }

  5. kam tų readln tiek daug?

    taip pat parašyta, kad neišvest rezultato, tai writeln neturi būt

    taip pat pas tave for cikle nėra pridedamas vienetas prie integer'io i, tai ciklas tęsis amžinai. Padaryk cikle, kad kaskart pridėtų po 1 prie i.

    Kelių readln prireikia fpc naudojantis kiek atsimenu iš praktikos.

    Dėl išvedimo tai turima omeny nenaudot crt modulio, o ne neišvest į konsolę.

    Mašai c ciklą su paskalio, veiks teisingai, pridėjus i+1 iteruosi per kas antrą i.

     

    var i:integer;

    rezultatas:integer;

    begin

    for i:= 1000 to 9999 do

    rezultatas:= i div 3;

    writeln(rezultatas);

    readln;

    Readln;

    end.

     

    ar tai galetu buti teisinga formule naudojant pascal?

    Neteisinga. Pagal sąlygą, turi skaičiaus skaitmenis sudėt ir juos tikrint ar dalijasi iš trijų.

    var i, n, sum, rezultatas:integer;
    begin
       for i := 1000 to 9999 do begin
           sum := 0;
           n := i;
           while (n > 0) do begin
               sum += n mod 10;
               n := n div 10;
           end;
           if ((sum mod 3) = 0) then begin
               rezultatas := i;
               writeln(rezultatas);
           end;
       end;
    end.
    

  6. void Rikiavimas(Automobilis A[], int n)
    {
    Automobilis t;
       bool done = false;
       while (!done) 
       {
       	done = true;
           for (int i = 0 ; i < n-1 ; i++) 
           {
               if ((A[i].pav > A[i+1].pav) || (A[i].pav == A[i+1].pav && A[i].z > A[i+1].z)) 
               {
                   done = false;
                   t = A[i];
       			A[i] = A[i+1];
       			A[i+1] = t;
               }
           }
           n--;
       }
    }

  7. Šiek tiek kitoks sprendimas:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    #define RECT_NUM 3
    #define MAX(x, y) (((x) > (y)) ? (x) : (y))
    #define MIN(x, y) (((x) < (y)) ? (x) : (y))
    
    struct Rect {
       int lx;
       int ly;
       int rx;
       int ry;
    };
    
    void readFile(Rect rectArray[]) {
    ifstream fd("data.txt");
    for (int i = 0; i < RECT_NUM; i++) {
    	fd >> rectArray[i].lx >> rectArray[i].ly >> rectArray[i].rx >> rectArray[i].ry;
    }
    fd.close();
    }
    
    int maxArea(Rect rectArray[]) {
    Rect tmp = rectArray[0];
    for (int i = 1; i < 3; i++) {
      		if ( tmp.lx < rectArray[i].rx && tmp.rx > rectArray[i].lx && tmp.ly < rectArray[i].ry && tmp.ry > rectArray[i].ly ) {
      			tmp.lx = MAX(tmp.lx, rectArray[i].lx); 
      			tmp.ly = MAX(tmp.ly, rectArray[i].ly);
      			tmp.rx = MIN(tmp.rx, rectArray[i].rx);
      			tmp.ry = MIN(tmp.ry, rectArray[i].ry);
      		}
      	}
      	return (tmp.rx - tmp.lx) * (tmp.ry - tmp.ly);
    }
    
    int main(int argc, char *argv[]) {
    Rect rectArray[RECT_NUM];
    readFile(rectArray);
      	cout << maxArea(rectArray) << endl; 
    return 0;
    }

  8. #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    struct Apskr {
    string apskPav;
    string savPav;
    int mNum;
    };
    
    void skaityti(Apskr[]);
    
    int main() { 
    Apskr apskr[60];
    skaityti(apskr);
    return 0;
    }
    
    void skaityti(Apskr a[]) {
    fstream in("U2.txt");
    int sk;
    in >> sk;
    for (int i = 0; i < sk; i++) {
    	in >> a[i].savPav >> a[i].mNum >> a[i].apskPav;
    	cout << a[i].apskPav << " " << a[i].savPav << " " << a[i].mNum << endl;
    }
    }

  9. program HelloWorld;
    Const n = 20;
    var 
    myArray : Array[1..n] of Integer;
    myArray2 : Array[1..n] of Integer;
    i, j, index : Integer;
    exist : Boolean;
    begin
     Randomize;
    
     for i := 1 to n do begin
     	myArray[i] := Random(10)+1;
     end;
    
     for i := 1 to n-1 do
     	write(myArray[i], ', ');
     writeln(myArray[n]);
    
     index := 1;
     exist := false;
     for i := 1 to n do begin
     	for j := 1 to n do 
     		if myArray[i]<>myArray2[j] then exist := false
     		else begin 
     			exist := true;
     			break;
     		end;
     	if not exist then begin
     		myArray2[index]:=myArray[i];
     		inc(index);
     	end;
     end;
    
     i := 1;
     while myArray2[i+1] <> 0 do begin
     	write(myArray2[i], ', ');
     	inc(i);
     end;
     writeln(myArray2[i]);
    end.

  10. Gal galit kas sia programa perrasyt su procedura nes man nelabai gaunasi Aciu

     

    Program DBDirMBK;
    var dbd, mbk: integer;
    
    procedure DBDirMBK(a, b: longint);
    var tmp : integer;
    begin
    tmp := a * b;
    while a<>b do
    	if a > b then a := a - b
    			 else b := b - a;
    dbd := a;
    mbk := tmp div a;
    end;
    
    begin
    DBDirMBK(12, 18);
       writeln('The least common multiple of 12 and 18 is: ', mbk);
       writeln('The greatest common divisor of 12 and 18 is: ', dbd);
    end.

     

    Nagrinėkis, gal čia aiškiau bus.

  11. Jei galima vietoj procedūros rašyt funkciją tuomet:

    Program lcmgcd;
    
    function lcm(a, b: longint): longint;
    begin
    lcm := a;
    while (lcm mod b) <> 0 do inc(lcm, a);
    end;
    
    function gcd(a, b: longint): longint;
    begin
    if a mod b <> 0 then gcd := gcd(b, a mod b)
       			else gcd := b;
    end;
    
    begin
    writeln('The least common multiple of 12 and 18 is: ', lcm(12, 18));
    writeln('The greatest common divisor of 12 and 18 is: ', gcd(12, 18));
    end.

  12. 26.

    var N : Longint;
    maxN : integer;
    counter, id : integer;
    begin
    counter := 1;
    write('Input: '); readln(N);
    maxN := N mod 10;
    while N > 0 do begin
    	if (N mod 10) >= maxN then begin 
    		maxN := N mod 10;
    		id := counter;
    	end;
    	N := N div 10;
    	inc(counter);
    end;
    writeln('Max: ', maxN);
    write('Nr.: ', id);
    end.

    27.

    var N : longint;
    num1 : integer;
    num3 : integer;
    sum : integer;
    begin
    write('Input: '); readln(N);
    num1 := N mod 10;
    num3 := N mod 1000;
    num3 := num3 div 100;
    sum := (num1*num1)+(num3*num3);
    write('Sum: ', sum);
    end.

    28.

    var N : longint;
    begin
    write('Input: '); readln(N);
    while N > 0 do begin
    	if ((N mod 10) mod 2) <> 0 then write((N mod 10)*(N mod 10), ' ');
    	N := N div 10;
    end;
    end.

  13. k1 = k;
    for i:=1 to (n-1)
    DO
    Begin
    k := k+2;
    End;
    Println k1+k;

     

    rodos taip bus.... reikėtu dar patikrinti dėl viso pikto/ (Paskalio jau turbūt 10 metų neteko naudoti)

    Jaučiu jog galima gražia formulę parašyti šitam skaičiavimui, bet nesugalvojau dar kaip

     

    Išmes neteisingą atsakymą kodas, 20 berods, vietoj 30.

     

    Keli variantai, rinkis patinkantį:

     

    function Sum(k:integer; n:integer):integer;
    begin
     Sum := k;
     for i := 1 to (n-1) do begin
       k := k + 2;
       Sum := Sum + k;
     end;
    end;

     

    function Sum2(k:integer; n:integer):integer;
    begin
     Sum2 := k;
     if n > 1 then
       Sum2 := Sum2 + Sum2(k+2,n-1);
    end;

    arba tiesiog

    s := k;
    for i := 1 to (n-1) do begin
     k := k + 2;
     s := s + k;
    end;

  14. emu8086

     

    Gali gal kokį link numesti, iš ko mokytis, nes pusės kas čia parašyta nesuprantu? :D Arba kokius nors, kad ir minimalius komentarus parašyk. :)

     

     

    Dėl veikimo programos tai EMU neturi 29h interrupto, todėl eilutę

    mov al, bl
    int 29h

    pakeisk į

    mov ah, 02h
    mov dl, bl
    int 21h

     

    %title "Trumpiausio zodzio ilgis"
    .model small
    .stack 100h
    .data
    atsakymas db 0Dh,0Ah,'Trumpiausio zodzio eiluteje ilgis: ','$'
    eilute dw 255
    .code
    pradzia:
    mov ax, @data								; init .data seg
    mov ds, ax									;
    
    mov ah, 0Ah									; isvedimo funkc.
    mov dx, offset eilute
    int 21h
    
    mov bh,00 								
    mov bl, byte ptr [eilute + 1]				; po 0Ah funkcijos, pirmi du baitai rodo įvestos eilutės ilgį, tas ilgis išsaugomas
    mov byte ptr [eilute + bx + 2], ' '			; eilutės gale tarpas (kitaip netikrintų paskutinio žodžio) 
    mov byte ptr [eilute + bx + 3], '$'			; žymi eilutės pabaigą
    
    mov di, 2 									; di, si - iteruojami registrai
    mov si, 0 									;
    mov bx, 00ffh 								; bet kokia reiškmė didesnė už 10, skirta tikrinimui su žodžio ilgiu
    
    .tikrink:
    cmp byte ptr [eilute + di], '$'				; tikrina ar eilutės pabaiga, jei pabaiga šoka į ".pabaiga:"
    	je .pabaiga
    cmp byte ptr [eilute + di], ' '				; tikrina ar tarpas 
    	je .tarpas
    inc di
    inc si
    jmp .tikrink								; nepraėjus tikrinimų šoka atgal į pradžią su padidintais di, si
    
    .tarpas:
    cmp bx, si 									; jei žodžio ilgis mažesnis už buvusį žodžio ilgį (bx) ir jį priskiria. jei ne tikrina toliau
    	ja .didesnis
    inc di
    mov si, 0
    jmp .tikrink
    .didesnis:
    mov bx, si
    inc di
    mov si, 0
    jmp .tikrink
    
    .pabaiga:
    mov ah, 09h									; išveda funkc.
    mov dx, offset atsakymas
    int 21h
    
    add bl, '0'									; hex2dec
    
    mov ah, 02h									; išveda mažiausią ilgį
    mov dl, bl
    int 21h
    
    mov ah, 4Ch
    int 21h
    end pradzia

     

    dėl mokymosi, tai galiu pasiųlyt tik intelio dokumentaciją.

    kur jus čia kankina su tuo emu?

  15. Sveiki.

     

    Reikia pagalbos rašant assemblerio programos kodą. Esu visiškai žalias šioje srityje, tai nepykit, jei mano klausimas jums pasirodys kvailas.

     

    Užduotis prašo į ekraną išvesti trumpiausio žodžio sakinyje ilgį. Pasiskaitęs konspektus, per visą dieną sugebėjau parašyti tik pačią pradžią - eilutės nuskaitymą. Nesugalvoju ką rašyti toliau. Būtų gerai, kad netik parašytumėt kodą, bet ir paaiškintumėt, arba bent užvestumėt mane ant kelio, nes vistiek visą programą turėsiu paaiškinti dėstytojui. :D

     

    Dėkui. :)

     

     

    %title "Trumpiausio zodzio ilgis"
    .model small
    .stack 100h
    .data
    atsakymas db 0Dh,0Ah,'Trumpiausio zodzio eiluteje ilgis: ','$'
    eilute dw 255
    .code
    pradzia:
    mov ax, @data
    mov ds, ax
    
    mov ah, 0Ah
    mov dx, offset eilute
    int 21h
    
    mov bh,00
    mov bl, byte ptr [eilute + 1]
    mov byte ptr [eilute + bx + 2], ' '
    mov byte ptr [eilute + bx + 3], '$'
    
    mov di, 2
    mov si, 0
    mov bx, 00ffh
    
    .tikrink:
    cmp byte ptr [eilute + di], '$'
    	je .pabaiga
    cmp byte ptr [eilute + di], ' '
    	je .tarpas
    inc di
    inc si
    jmp .tikrink
    
    .tarpas:
    cmp bx, si
    	ja .didesnis
    inc di
    mov si, 0
    jmp .tikrink
    .didesnis:
    mov bx, si
    inc di
    mov si, 0
    jmp .tikrink
    
    .pabaiga:
    mov ah, 09h
    mov dx, offset atsakymas
    int 21h
    
    add bl, '0'
    
    mov al, bl
    int 29h
    
    mov ah, 4Ch
    int 21h
    end pradzia

     

    Programa išves gerą atsakymą jeigu mažiausias žodis bus iki 9 simbolių. Čia kaipo viskas elementaru tai nepyk, bet tingiu aiškint. :D

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