infoarena

infoarena - concursuri, probleme, evaluator, articole => Articole => Subiect creat de: Stefan Istrate din Februarie 20, 2009, 01:43:26



Titlul: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Stefan Istrate din Februarie 20, 2009, 01:43:26
Comentarii la articolul Multe "smenuri" de programare in C/C++... si nu numai! (http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai).


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Andrei din Martie 12, 2009, 14:18:28
la functia : inmultirea unui numar mare cu un numar mare

ce inseama memset si memcpy ..


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: gaboru corupt din Martie 12, 2009, 14:24:45
memset(vect, x, sizeof(vector)); pune in vect[] pe toate pozitiile elementul x, iar memcpy(A,B,sizeof(B)) copiaza vectorul B in vectorul A.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Andrei din Martie 12, 2009, 14:40:29
ok.. ms.. si pt a folosi astea trebuie o inclusa o anumita biblioteca?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: gaboru corupt din Martie 12, 2009, 14:42:27
string.h


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Sima Cotizo din Martie 12, 2009, 15:03:17
memset(vect, x, sizeof(vector)); pune in vect[] pe toate pozitiile elementul x, iar memcpy(A,B,sizeof(B)) copiaza vectorul B in vectorul A.
De fapt nu pune chiar elementul x. Daca x este un byte, e ok, dar daca este int nu functioneaza cum te astepti tu (si in cazul asta cel mai sigur e sa initializezi vectorii cu un for).


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Vlad Tarniceru din Martie 20, 2010, 15:11:05
foarte tare :shock:

adica sunt niste algoritmi foarte simpli
eu aveam altii(facuti de mine)  mult mai inceti si mai lungi
multumesc mult  :D


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Dragos din Martie 27, 2010, 02:13:10
Salut!
Am o intrebare.
Daca am un numar mare de 100.000 de cifre in baza 16 si trebuie sa-l tranform in unul in baza 8 ce pot face sa imbunatatesc algoritmul urmator(care ruleaza in 16 secunde pe cand mie imi trebuie maxim 1 secunda):
Cod:
#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdlib>
using namespace std;

void div(int A[], int B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--, t %= B)
              A[i] = (t = t * 10 + A[i]) / B;
      for (; A[0] >= 1 && !A[A[0]]; A[0]--);
}
void inm(int A[],int B)
{int i,t=0;
    for(i=1;i<=A[0]||t;i++,t/=10)
        A[i]=(t+=B*A[i])%10;
    A[0]=i-1;
}
int mod(int A[], int B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % B;
      return t;
}
void inm2(int A[],int nova[],int B)
{int i,t=0;
    for(i=1;i<=A[0]||t;i++,t/=10)
        nova[i]=(t+=B*A[i])%10;
    nova[0]=i-1;
}
void add(int A[],int B[])
{int i,t=0;
 for(i=1;i<=A[0]||i<=B[0]||t;i++,t/=10)
    B[i]=(t+=A[i]+B[i])%10;
 B[0]=i-1;

}
int main()
{
    int i=0;
int a[100005]={0};
int *suma=new int[200000],*produs=new int[200000],*pow16=new int[200000],*rez=new int[200000];
char x;
int k=0;

ifstream fin("hex.in");
    while(fin>>x)
    {k++;
        if(x>='A'&&x<='F')
          a[k]=10+x-'A';
        else
           a[k]=x-'0';
    }

    fin.close();

pow16[1]=1;
pow16[0]=1;
for(i=k;i>=1;i--)                                        //transform in baza 10, numarul in baza 10 va fi vectorul suma care este de forma
    {                                                        // a[1]*16^k+a[2]*16^k-1+... din acest motiv l-am numit suma
    for(int contor=0;contor<=produs[0];contor++)
       produs[contor]=0;
     produs[0]=produs[1]=1;     // iar vectorul produs reprezita rezultatul inmultire dintre a[x] si uterea lui 16 corespunzatoare
    inm2(pow16,produs,a[i]);
    add(produs,suma);                           
    inm(pow16,16);                              // eu nu calculez de k ori puterile lui 16 ci pur si simplu stiind 16^x il aflu pe 16^x+1
    }



 i=0;                                                                    //tranform in baza 8
 while(suma[0]!=0)                          // cat timp numarul in baza 10 este diferit de 0 adica are macar o cifra diferita de 0
  { i++;
  rez[i]=mod(suma,8);                     //restul impartirii la 8

  div(suma,8);                               //impartima numarul in baza 10 la 8

  }

freopen ("hex.out","w",stdout);
  for(k=i;k>=1;k--)
   printf("%d",rez[k]);
printf("\n");

 return 0;

 }
Multumesc anticipat!


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Andrei Grigorean din Martie 27, 2010, 02:51:00
Trebuie sa treci numarul prin baza 2.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Dragos din Martie 27, 2010, 10:17:43
Trebuie sa treci numarul prin baza 2.
De ce?
Asa merge mai repede?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Stefan Istrate din Martie 27, 2010, 10:19:30
O cifră în baza 16 reprezintă 4 cifre în baza 2. După ce ai transformat în baza 2, poți grupa câte 3 cifre și obții numărul în baza 8.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Dragos din Martie 27, 2010, 23:51:24
Daca am 10101 cum impart in cate 3?
asa:
101 01
sau asa :
10 101 ?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Gabriel Bitis din Martie 28, 2010, 00:04:13
De la dreapta la stanga : 10 101. Pornesti de la cifra unitatilor, continui cu a zecilor.. si asa mai departe, si unde nu mai ai biti destui poti completa cu 0'uri in fata.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: MciprianM din Septembrie 19, 2010, 22:31:12
LA "Smenul lui Batog" unde se imparte intervalul in bucati de sqrt ( n ) cum se face query-ul?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mihai Calancea din Septembrie 19, 2010, 22:58:35
Pentru intervale de forma k * sqrt(n) , (k + 1) * sqrt(n) ai raspunsul in o(1). Profiti de chestia asta ca sa calculezi cat mai mult din suma intervalului [st,dr] in timp constant si apoi ce ramane poti aduna manual.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Savin Tiberiu din Septembrie 20, 2010, 08:56:01
De fapt calculezi manual cu for de la st pana la primu numar de forma k * sqrt(n). Apoi incepi sa mergi din sqrt(n) in sqrt(n) pana ajungi la cel mai mare numar care e multiplu de sqrt(n) dar mai mic decat dr. De acolo calculezi din nou manual pana la dr. Worst case o sa ai complexitatea 3 * sqrt(n) = O(sqrt(n))


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: MciprianM din Septembrie 20, 2010, 09:14:56
Dar nu inteleg un lucru. Sa luam ca exemplu datele din enunt. Un sir A0...15 si un sir B0...3. Sa presupunem ca la inceput toate elementele acestor siruri sunt egale cu 0. Apoi facem update pe intervalul [ 4, 7 ]- sa zicem ca crestem elementele din intervalul asta cu 2- apoi cautam sa gasim suma elementelor din intervalul [ 6, 8 ]. Acest interval are prima parte ( [ 6, 7 ] ) in intervalul [ 4, 7 ] si a doua parte ( [ 8,8 ] ) in intervalul [ 8, 11 ]. Acuma daca vom cauta elementele 6 si 7 in sirul A, acestea vor fi 0, nu? Cand am facut Update pe intervalul [ 4, 7 ] am crescut cu 2 doar B1, elementele din A au ramas nemodificate. Un astfel de exemlu poate fi gasit si cand intervalul a carui suma o cautam contine un interval de forma [ k sqrt(n), (k+1) sqrt(n) ]. Unde gresesc? Din enuntul articolului si din ce ati spus voi nu imi dau seama.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Savin Tiberiu din Septembrie 20, 2010, 09:24:26
Ah, la primul post pe care l-am dat am crezut ca update-urile sunt pe fiecare element nu pe interval. Pai in cazul asta in vectorul B tii minte ce update-uri ai facut (ma rog cred ca iti mai trebuie un vector aici pe care sa tii minte suma initiala pe fiecare bucata). In momentul asta cand faci query-ul pe 6-8, o sa parcurgi manual toate elementele, iar pentru 6 si 7 o sa vezi ca sunt 0 in A insa o sa vezi in B ca ai facut un update pe bucata respectiva si deci o sa aduni la valoarea din A valoarea respectiva din B la fiecare element.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Alexandru-Iancu Caragicu din Octombrie 05, 2010, 18:12:13
La functiile acelea de operatie pe numere mari, presupui ca in numar, dincolo de digitii care indica numarul gasesti doar 0. Adica nu putea fi adaptata ca sa functioneze si cand restul digitilor nu-s buni? Ca pierzi mult timp cand egalezi un nr cu 0 sa stai sa faci toate cifrele 0 (in loc sa reglezi direct dimensiunea 0).


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Farcas Ionut din Februarie 10, 2011, 16:56:05
imi zice cnv  ce inseamna step <<= 1  de la cautare binara ? :D


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mircea Dima din Februarie 10, 2011, 17:54:43
step *= 2;

e operatie pe biti.. a << b inseamna a * (2^b)
iar a >> b inseamna a / (2^b)


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Vasilut Lucian din Iulie 01, 2011, 14:23:58
am o intrebare;la primul exemplu cel cu indexarea de la -100;
daca vreau sa indexez un vector de frecventa care memoreaza valori de la -1000 pana la 1000;
int a[2001];
#define a( a + 1000)
este corect?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: cont cu nume gresit sau fals din Iulie 01, 2011, 16:37:49
da, e corect


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Doru Gucea din Iulie 05, 2011, 19:06:36
My first comment :agent:

Ce face linia
Cod:
for (; A[0] > 1 && !A[A[0]]; A[0]--); ?
?

Ce inseamna A[A[0]] ?
Ms !

Later Edit : Mi-am dat seama.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Vlad Tarniceru din August 02, 2011, 15:13:11
elimina zerourile care raman in plus la inceputul numarului (care practic e sfarsitul pentru ca la operatii pe numere mari trebuie rotite mai intai numerele)
:)


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: mdmdmd din Ianuarie 09, 2012, 20:04:21
La adunarea numerelor mari
Cod:

void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}
este corecta functia daca cele 2 numere au acelasi numar de cifre ( A[0] == B[0] ), iar in acest caz suma cifrelor dominante este mai mica decat 9.  

Si de ce A[0] = i - 1 ? Daca am avea:
Cod:
A[] = {3, 9, 9, 9};
B[] = {3, 8, 8, 8};
add(A, B);
Vectorul A ar trebui sa fie 47881.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Paul-Dan Baltescu din Ianuarie 09, 2012, 21:09:44
1. De ce nu?

2. A[0] = i-1 pentru ca la finalul for-ului i va avea o valoare pentru ca nici una dintre cele 3 conditii nu este adevarata. Desi nu cred ca rezultatul pe care il astepti tu pentru cazul respectiv e corect.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Ionescu Robert Marius din Ianuarie 14, 2012, 12:15:49
La solutia lui Mihai Patrascu ar mai merge optimizat un pic:
Cod:
int x[n], n;

int best_binary(int elem)
{
    int poz = 0, nr_bit = 0, m = n;

    for ( ; m ; m = m & ((nr_bit = m) - 1) );

    for ( ; nr_bit ; nr_bit >>= 1)
        if (poz + nr_bit < n && x[poz + nr_bit] <= elem)
            poz += nr_bit;

    return poz;
}


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mari Patrascu din Ianuarie 16, 2012, 20:26:54
pentru cei mai incepatori erau perfecte si niste comentarii la anumite instructiuni  :roll:


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mihai Visuian din Ianuarie 17, 2012, 16:03:57
Nu inteleg la smenul lui mars. De ce complexitatea de adunare pe un interval este O(1)?
EX:
n = 6
sirul: 1 2 3 4 5 6 si vreau sa incrementez pe intervalul [1,4] valorile cu 10 .
Cum se face update-ul in B daca A = B[0]+...+B?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Ionescu Robert Marius din Februarie 02, 2012, 11:03:02
A = [1,  2, 3, 4, 5, 6]
B = [0, 10, 0, 0, 0, -10]
Este O(1) pentru update si O(N) pentru afisarea sirului. Este eficient doar atunci cand ai multe operatii de update si doar una de afisare.
Ai = Ai + B0 + B1 + ... + Bi
A0 = 1 + 0 = 1
A1 = 2 + 10 = 12
A2 = 3 + 10 = 13
A3 = 4 + 10 = 14
A4 = 5 + 10 = 15
A5 = 6 + 10 - 10 = 6


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Andrici Cezar din Martie 12, 2012, 09:52:24
Deci cautarea binara pe puteri a lui 2 e mai inceata decat cautarea binara normala. Puteti sa-mi explicat de ce se intampla asta?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Alexandru-Iancu Caragicu din Martie 13, 2012, 15:27:22
La scaderea a doua numere mari, ce rol are conditia (i <= B[0])? Oricum vectorii in care se retin numerele mari trebuie sa aiba aceeasi lungime declarata si sa aiba numai cifre de 0 in fata. Se observa foarte clar asta la adunare, unde i avanseaza pana cand se termina ambele numere (si restul), si folosirea directa a termenilor A[ i ] si B[ i ] implica automat existenta de 0 la inceputul (dreapta) numarului pana la sfarsit.
Astfel, la scadere, daca i > B[0], B[ i ] va fi oricum 0, deci conditia ((i <= B[0]) ? B[ i ] : 0) mi se pare inutila.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Laurentiu Ion din Martie 13, 2012, 15:38:19
Deci cautarea binara pe puteri a lui 2 e mai inceata decat cautarea binara normala. Puteti sa-mi explicat de ce se intampla asta?
De ce zici asta? Diferenta mare nu este oricum, din moment ce amandoua fac in principiu cam acelasi lucru, doar ca cea pe puteri ale lui 2 are operatii mai usoare (doar adunare si shift-are), deci este probabil putin mai rapida.

La scaderea a doua numere mari, ce rol are conditia (i <= B[0])? Oricum vectorii in care se retin numerele mari trebuie sa aiba aceeasi lungime declarata si sa aiba numai cifre de 0 in fata. Se observa foarte clar asta la adunare, unde i avanseaza pana cand se termina ambele numere (si restul), si folosirea directa a termenilor A si B implica automat existenta de 0 la inceputul (dreapta) numarului pana la sfarsit.
Astfel, la scadere, daca i > B[0], B va fi oricum 0, deci conditia ((i <= B[0]) ? B : 0) mi se pare inutila.
Intr-o lume ideala, da, in B ar trebui ca peste lungimea B[0] sa fie doar cifre de 0. Dar sunt cazuri in care ai micsorat doar lungimea, dar nu ai mai pus si 0 (asta nu se aplica numai aici, de exemplu si la o stiva implementata manual, cand scoti un element doar micsorezi dimensiunea stivei, nu pui si 0 la sfarsit -- il stergi doar virtual, nu fizic, si la multe chestii din STL la fel...)


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Simoiu Robert din Martie 13, 2012, 15:42:03
Prima data modifica pt. ca [i ] (adunat) inseamna italic, fa cum am pus eu. Apoi, tu cand ai un vector B sa zicem care retine numarul 1515125125, si tu ca sa il readuci la 0 faci B[0] = 0 (observi ca restul raman la fel). Astfel, cand faci scaderea, daca nu faci acea conditie, cand scazi din A (sa zicem 1234) pe B (care dupa B[0] = 0 o sa fie 15), B[3] o sa fie 1, nu o sa fie 0, pentru ca asa a ramas modificat. De aceea, daca i > B[0] (adica in cazul nostru decat 2, atunci valoarea aceea trebuie sa fie 0). Mai ai o varianta, cand faci B[0] = 0, sa faci memset (B, 0, sizeof (B)), dar dureaza prea mult, si nu merita ;).

[PS] Am postat in acelasi timp :).

Iti propun sa tratezi codul asta :
Cod:
 atr (B, 1555);
atr0 (B);
atr (A, 194);
atr (B, 15);
sub (A, B);
Unde sub (A, B) <-> A -= B, atr (A, X) <-> A = X (X int) si atr0 (A) <-> A = 0, adica ca si numar mare A[0] = 0.


Titlul: Răspuns: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Alexandru-Iancu Caragicu din Martie 13, 2012, 16:07:17
@laurion, SpiderMan
Stiu ideea cu resetarea super rapida cu setarea lungimii numarului la 0 (am si spus mai devreme asta).
La functiile acelea de operatie pe numere mari, presupui ca in numar, dincolo de digitii care indica numarul gasesti doar 0. Adica nu putea fi adaptata ca sa functioneze si cand restul digitilor nu-s buni? Ca pierzi mult timp cand egalezi un nr cu 0 sa stai sa faci toate cifrele 0 (in loc sa reglezi direct dimensiunea 0).
Dar am inteles ca abordarea asta complica implementarea operatiilor si de multe ori nu este necesara.
La adunare nu merge daca sunt cifre reziduale in fata, se presupune ca sunt 0. Asa ca nu inteleg de ce scaderea ar fi diferita? De ce o functie este implementata intr-un stil si cealalta in alt stil?


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Simoiu Robert din Martie 13, 2012, 21:28:46
Si adunarea trebuie facuta dupa modelul scaderii, doar ca nu e, eu am patit-o de multe ori si cu adunarea. Daca o sa am timp, o sa le modific cum trebuie :).


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mihai Visuian din Iunie 22, 2012, 21:30:17
La operatiile pe numere mari nu prea cred ca merg codurile daca facem operatii cu numere negative... Am incercat si nu prea mergea.
Eu cred ca numerele ar trebui citite ca niste stringuri, in care a[0] sa fie numarul de cifre, iar a[a[0]+1] sa fie semnu sau ceva de genu...


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Adrian Budau din Iunie 22, 2012, 21:39:11
Sau daca vrei poti sa codifici numerele negative cum le face C++ in baza 2. Fie N numarul maxim de cifre ale unui numar mare din operatiile tale + 1. Atunci -1 e 9999....9(9 de N ori) -2 e 9999.9998(9 de N - 1 ori s un 8) si asa mai departe descrascator. Acum poti face toate operatiile (mai putin impartirea) la fel. Si ca sa afli ce numar ai e doar inlocuiesti fiecare cifra cu 9 - acea cifra si aduni 1.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mihai Visuian din Iunie 22, 2012, 21:41:43
A chiar... la asta nu m-am gandit :aha:


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Cezar Mocan din Iunie 23, 2012, 05:05:08
Budau Adrian e un boss :)


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Oncescu Costin din Decembrie 12, 2012, 14:02:24
Am incercat sa fac problema blockout de pe campion folosind smenul lui Bogdan Batog.Ma poate ajuta cineva cu implementarea smen-lui pe matrice?La vector e logic dar la varianta 2D mi se pare foarte nasol.Implementarea mea are 400 de randuri si tot mai are WA.Daca imi poate arata cineva o implementare mai omeneasca si mai corecta as fi recunoscator.
Multumesc anticipat.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Bodnariuc Dan Alexandru din Ianuarie 30, 2013, 21:14:07
Am vazut smenul cu array neidaxat de la 0
 int A [ 201 ] ; 
 #define A (A + 100)
  imi poate si mie explica cum functioneaza asta?? adica A e vector.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: George Marcus din Ianuarie 30, 2013, 21:18:48
Prin A se intelege defapt adresa de inceput a vectorului. Deci, A[3] e defapt A + 3.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Bodnariuc Dan Alexandru din Februarie 07, 2013, 01:28:57
mersi.
totusi mai am o intrebare daca am o matrice de ex A [ i ][ j ] (fac problema rucsac sa zicem)
 j-ul poate da negativ in acest caz cum fac defineul?
cred ca
#define A (A+100) nu functioneaza.mersi anticipat


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Sorin Rita din Februarie 07, 2013, 01:53:11
Nu stiu sa iti raspund la intrebare dar problema asta o poti rezolva si altfel. Sa zicem ca ai un vector A si -100<=i<=100. O sa declari A[205] sa zicem. Acum imi fixez originea pe pozitia 100. Pentru asta iei o variabila mid=100. Iar acum elementul de pe pozitia i din vector se gaseste la A[mid+i]. Asta o poti extinde mai departe si in 2 dimensiuni. Poate ca nu e asa elegant dar e o metoda.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Mircea Dima din Februarie 07, 2013, 14:19:05
mersi.
totusi mai am o intrebare daca am o matrice de ex A [ i ][ j ] (fac problema rucsac sa zicem)
 j-ul poate da negativ in acest caz cum fac defineul?
cred ca
#define A (A+100) nu functioneaza.mersi anticipat

Ai putea face asa:

Cod:
#include <cstdio>

int a[100][200];

#define a(i, j) a[i][j + 100]

int main() {
    a(10, -12) = 15;
    printf ("%d\n", a(10, -12));
}


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: hiticasabel din Iunie 26, 2013, 11:49:36
mersi.
totusi mai am o intrebare daca am o matrice de ex A [ i ][ j ] (fac problema rucsac sa zicem)
 j-ul poate da negativ in acest caz cum fac defineul?
cred ca
#define A (A+100) nu functioneaza.mersi anticipat

Ai putea face asa:

Cod:
#include <cstdio>

int a[100][200];

#define a(i, j) a[i][j + 100]

int main() {
    a(10, -12) = 15;
    printf ("%d\n", a(10, -12));
}

Merci mult! Asta m-a ajutat.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Hurmuzache Ciprian din Mai 08, 2014, 14:07:35
procedura rotateright si rotateleft nu este buna sau daca este atunci se poate ilustra cu un exemplu pt ca imi este neclara.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Rominu Alexandru din August 06, 2018, 11:29:27
Nu pot sa inteleg cum functioneaza smenul lui Mars 2d. Nu pot sa-mi dau seama cum ar vrea sa adun dupa in submatricea aia... si cel mai important nu inteleg de ce e B[x2+1][y2+1] += p care e un element in afara matricei noastre.


Titlul: Răspuns: Multe "smenuri" de programare in C/C++... si nu numai!
Scris de: Dan Cojocaru din Noiembrie 10, 2018, 10:47:17
Cautarea aia binara e smechera si alea alea, dar "mai usor de inteles" este o minciuna la nivel de politicieni. A luat destul brainstorming sa imi dau seama de ce dracu face ce face...