Jump to content

skyler_sdf

+Helpers
  • Posts

    279
  • Joined

  • Last visited

  • Days Won

    9

Everything posted by skyler_sdf

  1. 1. Se cere sa sa steara toate numerele palindroame dintr.o lista liniara simplu inlantuita. Se va crea un meniu cu optiunile: creare lista, adaugare nod in lista, stergerea tuturor palindroamelor, transformarea listei in lista circulara. #include <stdio.h> #include <conio.h> typedef struct nod { int key; //valoare nod *next; //pointer catre nodul urmator } tNod; tNod *pFirst; //creaza lista tNod* CreateList(int someValue) { tNod *pListFirst; pListFirst = new(tNod); pListFirst->key = someValue; pListFirst->next = NULL; return pListFirst; } //adauga element in lista void AddToList(int someValue, tNod *pListFirst) { if(!pListFirst) { printf("Selectati intai optiunea 1!\n"); return; } tNod *pNod, *newNod = new(tNod); pNod = pListFirst; while(pNod->next) { pNod = pNod->next; } pNod->next = newNod; newNod->key = someValue; newNod->next = NULL; } //afiseaza lista void PrintList(tNod *pFirstList) { if(!pFirstList) return; tNod *pNod = pFirstList; while(pNod->next && pNod->next != pFirstList) { printf("%d -> ", pNod->key); pNod = pNod->next; } printf("%d\n", pNod->key); } //verifica daca numarul este palindrom bool IsPalindrom(int n) { int orig = n, inv = 0; while(n > 0) { inv = inv * 10 + (n % 10); n = n / 10; } if(inv == orig) return true; else return false; } tNod* CreateList2(int someValue) { tNod *pListFirst; pListFirst = new(tNod); pListFirst->key = someValue; pListFirst->next = NULL; return pListFirst; } //adauga element in lista2 void AddToList2(int someValue, tNod *pListFirst) { if(!pListFirst) { printf("Selectati intai optiunea 1!\n"); return; } tNod *pNod, *newNod = new(tNod); pNod = pListFirst; while(pNod->next) { pNod = pNod->next; } pNod->next = newNod; newNod->key = someValue; newNod->next = NULL; } //sterge toate palindroamele din lista tNod* EraseP(tNod *pFirstList) { tNod *pOrigFirst = pFirstList; tNod *pFirstE, *pImd; pImd = NULL; //parcurgere lista pana la primul palindrom int count =0; while(pFirstList->next && !IsPalindrom(pFirstList->key)) { if(count == 0) pImd = CreateList2(pFirstList->key); else AddToList2(pFirstList->key,pImd); pFirstList = pFirstList->next; } //daca am ajuns la final iesim if(pFirstList == NULL) return pFirstList; if(IsPalindrom(pFirstList->key)) { pFirstList = pFirstList->next; } //daca am ajuns la final iesim if(pFirstList == NULL) return pFirstList; pFirstE = pFirstList; //cat timp mai sunt elemente while(pFirstList->next ) { //daca nu e palindrom adaug in pImd if(!IsPalindrom(pFirstList->key)) { AddToList2(pFirstList->key,pImd); } pFirstList = pFirstList->next; } //prelucrare ultimul element if(!IsPalindrom(pFirstList->key)) { AddToList2(pFirstList->key,pImd); } return pImd; } //transforma lista in lista circulara void TransfToCirc(tNod *pFirstE) { while(pFirstE->next) { pFirstE = pFirstE->next; } pFirstE->next = pFirst; } //meniu void PrintMenu() { printf("\n1. Creare lista simplu inlantuita"); printf("\n2. Adaugare nod in lista simpla inlantuita"); printf("\n3. Stergere nr tip palindrom"); printf("\n4. Transf in lista circulara"); printf("\n5. Iesire\n"); } //initializeaza lista void Init() { pFirst = NULL; } int main() { Init(); int choise = 0; int n; PrintMenu(); scanf("%d", &choise); while(choise != 5) { switch(choise) { case 1: printf("Introduceti un elem: "); scanf("%d", &n); pFirst = CreateList(n); PrintList(pFirst); break; case 2: printf("Introduceti un elem: "); scanf("%d", &n); AddToList(n, pFirst); PrintList(pFirst); break; case 3: pFirst = EraseP(pFirst); PrintList(pFirst); break; case 4: TransfToCirc(pFirst); PrintList(pFirst); break; default: break; } PrintMenu(); scanf("%d", &choise); } return 1; } 2. Sa se creeze un meniu ce contine urmatoarele optiuni: creare lista dublu inlantuita, adaugare nod in lista dublu inlantuita (aceeasi observatie ca la 1.2), stergere noduri ce contin valori numere perfecte (exemplu nr perfect: 6 = 1 + 2 + 3; suma divizorilor exceptandu-l pe 6 este numarul in sine), iesire din meniu. #include <stdio.h> #include <conio.h> typedef struct nod { int key; nod *next; nod *prev; } tNod; tNod *pList; void CreateList() { if(!pList) { pList = new tNod; pList->key = -1; pList->next = NULL; pList->prev = NULL; } } //adauga element in lista bool AddToList(tNod *pListToAdd) { if(!pListToAdd) { printf("Lista necreata!\n"); return false; } int n; tNod *pNewNod; printf("Introduceti valoarea: "); scanf("%d", &n); if(n <= 0) { printf("\nNr e negativ, dati un nr pozitiv nenul!\n"); return false; } if(pListToAdd->key == -1) { pListToAdd->key = n; } else { while(pListToAdd->next) { pListToAdd = pListToAdd->next; } pNewNod = new(tNod); pListToAdd->next = pNewNod; pNewNod->prev = pListToAdd; pNewNod->next = NULL; pNewNod->key = n; } return true; } //sterge nod void eraseNode(tNod **pListToRemoveFrom, tNod *pNod) { if(pNod == *pListToRemoveFrom) { pNod = (*pListToRemoveFrom)->next; if(pNod) pNod->prev = NULL; delete(*pListToRemoveFrom); *pListToRemoveFrom = pNod; } else if(pNod->next == NULL) { pNod->prev->next = NULL; delete(pNod); } else { pNod->next->prev = pNod->prev; pNod->prev->next = pNod->next; delete(pNod); } } //verifica daca un nr e perfect bool verifyIsPerfect(int n) { int k,i; int sum = 0; for(i = 1; i <= n/2; i++) { k = n % i; if(!k) { sum += i; } } if(sum == n) return true; else return false; } // stergere patrate perfecte void erasePerfect(tNod *pListToRemovePerfect) { tNod *pNod; while(pListToRemovePerfect) { pNod = pListToRemovePerfect; pListToRemovePerfect = pListToRemovePerfect->next; if(verifyIsPerfect(pNod->key)) eraseNode(&pList, pNod); } } //printeaza lista void PrintList(tNod *pFirstList) { if(!pFirstList) return; tNod *pNod = pFirstList; while(pNod->next) { printf("%d -> ", pNod->key); pNod = pNod->next; } printf("%d\n", pNod->key); } //meniu void Menu() { printf("\n1. Creare lista dublu inlantuita"); printf("\n2. Adaugare nod in lista dublu inlantuita"); printf("\n3. Stergere noduri nr perfecte"); printf("\n4. Iesire\n\n"); } int main() { pList = NULL; int choise = 0; int n; Menu(); scanf("%d", &choise); while(choise != 4) { switch(choise) { case 1: CreateList(); printf("\nLista a fost creata!\n"); break; case 2: AddToList(pList); PrintList(pList); break; case 3: erasePerfect(pList); PrintList(pList); break; default: break; } Menu(); scanf("%d", &choise); } return 0; }
      • 1
      • Upvote
  2. hello...gasesti ce.ti trebuie aici Link bafta!
  3. Se cere sa se implementeze comanda copy din MS-DOS. Se creaza fisierul my_copy.cpp, ce cuprinde urmatorul cod: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #define BUFLNG 1000 //lungimea buffer-ului folosit la copiere #define FTMP "my_copy.tmp" //fisier de lucru temporar char sursa[13], dest[13]; void analiza_parametri(int nr_p, char *parametru[]) //nr_p= un numar intreg reprezentand numarul de parametri din linia de comanda, adica lungimea vectorului parametru { strcpy(sursa, parametru[1]); strcpy(dest, parametru[2]); switch(nr_p) { case 1: printf("\nFisier sursa: "); gets(sursa); case 2: printf("\nFisier destinatie: "); gets(dest); case 3: strcpy(sursa, sursa); strcpy(dest, dest); break; default: printf("\nPrea multi parametri.\n"); exit(1); } } void copiere(FILE *f1, FILE *f2) { char c, *buf_cit; int nb_cit, cit, nb_scr; if((f1=fopen(from, "rb"))==NULL) { printf("\nfisier de intrare eronat!\n"); exit(1); } if((f2==fopen(dest, "rb"))!=NULL) { printf("\nFisier destinatie existent!\n"); printf("Suprascriem [d/n]? "); c=getche(); if(c=='N' || c=='n') strcpy(dest, FTMP); } if((f2==fopen(to, "wb"))==NULL) { printf("\n\nEroare de creare fisier destinatie!"); exit(1); } if((buf_cit=(char *)malloc(BUFLNG))==NULL) { printf("\n\aMemorie insuficienta.\n"); exit(1); } while((nb_cit=fread(buf_cit, 1, BUFLNG, f1))!=0 && (nb_scr=fwrite(buf_cit, 1, nb_cit, f2))==nb_cit) fclose(f1); fclose(f2); printf("\nCopiere"); if(nb_cit!=nb_scr) printf("\a in"); printf("\nCompleta."); } void main(int argc, char *argv[]) { FILE *pfrom, *pto; analiza_parametri(argc, argv); copiere(pfrom, pto); } In urma compilarii, se va crea executabilul my_copy.exe, care se va putea apela cu: my_copy <fisier_sursa> <fisier_destinatie>
  4. Programare C Limbajul C - Info.zip
  5. Datele de intrare se gasesc in fisierul "destinatie.in" sub forma: pe prima linie cele 4 coordonate reprezentand coordonatele punctului de pe drum, respectiv coordonatele destinatiei sub forma unor numere intregi, pe urmatoarele linii se afla coordonatele cate unui obstacol, dat prin: coordonatele varfului stanga-sus(x_sus, y_sus) si coordonatele punctului dreapta jos(x_jos, y_jos) tot sub forma unor numere intregi(presupunem ca obstacolele au laturile paralele si avem fixat un sistem de coordonate cu axele paralele cu aceste laturi ale dreptunghiurilor). Datele de iesire: "destinatie.out" se va construi una dintre afirmatiile: "Drumul nu se poate construi", resp. "Drumul se poate construi". Problema se reduce de fapt la a determina daca un segment de dreapta intersecteaza un dreptunghi. Avem doua cazuri de analizat: 1. Daca segmentul este inclus intr.unul din semisegemtele de la stanga, de sus, de la dreapta sau de jos care nu includ dreptunghiul. Daca "da" (ambele capete sunt intr.unul din aceste semiplane), atunci decidem ca segmentul nu intersecteaza dreptunghiul. 2. Conditia ca in acest caz dreptunghiul si segmentul sa nu se intersecteze este ca toate varfurile dreptunghiului sa fie de aceeasi parte a dreptei determinate de segmentul dat. #include<stdio.n> FILE *fin; typedef struc punct{ int x, y; }tpunct; int max(int x, int y) { return (x>y?x:y); } int caz1(tpunct d1, tpunct d2, tpunct s1, tpunct s2) { int xsmax, xsmin, ysmax, ysmin; int xdmax, xdmin, ydmax, ydmin; xsmax=max(s1.x, s2.x); xsmin=min(s1.x, s2.x); ysmax=max(s1.y, s2.y); ysmin=min(s1.y, s2.y); xdmax=max(d1.x, d2.x); xdmin=min(d1.x, d2.x); ydmin=min(d1.y, d2.y); ydmax=max(d1.y, d2.y); return (xsmax<xdmin)|| (xsmin<xdmax) || (ysmin>ydmax) || (ysmin<ydmin); } int caz2(tpunct d1, tpunct d2, tpunct s1, tpunct s2) { double a, b, c; double aux; a=s1.y-s2.y; b=s2.x-s1.x; c=s1.x*s2.y-s2.x*s1.y; return ((a*d2.x+b*d2.y+c)*aux>0)&&((a*d1.x+b*d1.y+c)*aux>0)&&((a*d2.x+b*d1.y+c)*aux>0); } int intersectie(tpunct d1, tpunct d2,tpunct s1, tpunct s2) { if(caz1(d1, d2, s1, s2)) return 0; //daca suntem in cazul 1 if(caz2(d1, d2, s1, s2)) return 0; //daca suntem in cazul 2 return 1; } int citire_date(tpunct &m, tpunct &n) { return fscanf(fin, "%d%d%d%d\n", &m.x, &m.y, &n.x, &n.y); } void scrie_date(int k) { FILE *fout; fout=fopen("destinatie.out", "w"); if(k) fprintf(fout, "Drumul nu se poate construi"); else fprintf(fout, "Drumul se poate construi"); fclose(fout); } void main() { tpunct m, n; tpunct a, c; int verifica=0; fin=fopen("destinatie.out", "r"); citire_date(m, n); while(citire_date(a, c)>1 && !verifica) verifica+=intersectie(a, c, m, n); scrie_date(verifica); fclose(fin); }
  6. Dat un numar prim n<=5000 determinati cel mai mic numar natural care are exact n divizori. Numarul n se va citit de la testatura, iar rezultatele se vor scrie pe ecran, cat si in fisierul "divizori.rez", sub forma specificata in exemplu, adica pe prima linie numarul n si pe urmatoarele linii numarul obtinut ex: intrare 7 iesire 7 64 ptr ca 64 are 7 divizori(1, 2, 4, 7, 8, 12, 32, 64) Analiza problemei: cel mai mic numar care are exact n divizori este 2 la puterea(n-1). Deci va trebui sa scriem un program care sa calculeze puterile lui 2 pentru n mare. Determinarea numarului de cifre al numarului 2 la puterea (n), vom folosi urmatorul principiu (n*log(2)/log(10))+1 ex: numarul cifrelor lui 2 la puterea(5000) este 1506. Asadar mai trebuie sa implementam operatia de inmultire a lui 2 cu un numar mare. #include<iostream.h> #include<fstream.h> fstream f; int inmultire_2(int &k, int *a) { int aux, t=0; for(i=0; i<=k; i++) { aux=t+a[i]*2; a[i]=aux%10; t=aux/10; } if(t) { k++; a[k]=t; return 1; } } void write(int k, int *a) { if(k>=0) { cout<<a[k]; f<<a[k]; write(k-1, a); } } void main() { int a[5000], k=0; a[0]=1; int n, i; f.open("divizori.rez", ios::out); cout<<"Dati numarul: "; cin>>n; f<<n<<"\n"; for(i=1; i<n; i++) inmultire_2(k, a); write(k, a); f.close(); }
  7. mysql_fetch_array returns row as an associative array. an ex: $query="select .... from......"; $result=mysql_query($query); while($row=mysql_fetch_array($result); ..........
  8. mai invata si altii...de ex eu

  9. :):)pai daca tot te pricepi asa bine, d c nu?
  10. sa inteleg ca ne adaugi si noua cv p acolo la capitolul programare php, etc, nu?

  11. interesant site.ul cu it_area...

  12. hello:) Durata de viata a unui SSD este determinata de: -cantitatea de data scrisa in media pe zi pe acel SSD; -de tehnologiile folosite pe acel SSD (solid state drive). Folosirea unor tehnologii cum ar fi: WEAR LEVELING sau TRIM poate duce la o prelungire a duratei de viata a unui SSD. Un mare dezavantaj al noilor harduri SSD este faptul ca acestea au o durata de viata limitata si care poate fi calculata mult mai precis. Datorita tehnologiei folosite la stocarea datelor, in memorii flash, acestea pot fi scrise de un numar limitat de ori (in jur de 100.000 de scrieri). Cind se atinge aceasta limita, hard-diskul SSD nu mai poate fi scris, el poate doar fi citit (read-only).
  13. Se da un sir de numere. Sa se sorteze crescator folosind principul de extragere al cifrelor, si liste. Extragerea incepe cu ultima cifra a numarului. In functie de aceasta se va pune numarul intr.o lista. Deci vom avea 10liste. Daca pentru un numar nu mai avem de extras cifre, dar exista un altul, p acela il vom pune in lista L0. ex: nr 153, 65211, la pasul 4 ptr numarul 153 nu avem de extras cifre(are doar 3), asadar il vom pune in L0. #include<iostream> #include<conio.h> #include<stdio.h> #include<stdlib.h> using namespace std; struct nod {int info; nod *urm;}; void creare(nod **prim, nod **ultim,int x) { nod *p; p= new nod; p->info=x; p->urm=NULL; if(*prim==NULL) { *prim=*ultim=p; } else { (*ultim)->urm=p; *ultim=p; } } void afisare(nod *prim,nod *ultim) {nod *p=prim; if(p==NULL) cout<<"Lista este vida."; else {while(p!=ultim) {printf("%d-->",p->info); p=p->urm;} printf("%d",p->info);} } int extragerecif (int x,int nr) {int i; for (i=1;i<nr;i++) x=x/10; return x%10; } int maxim(nod *prim , nod *ultim) {int max=0,x; nod *p; for(p=prim;p!=NULL;p=p->urm) {x=p->info; int nr=0; while(x!=0) {nr++; x=x/10;} if(nr>max) max=nr; } return max; } int nrcif(int x) {int nr=0; while(x!=0) {nr++; x=x/10;} return nr; } int main() {nod *Lp=NULL,*Lu=NULL,*L0p,*L1p,*L2p,*L3p,*L4p,*L5p,*L6p,*L7p,*L8p,*L9p,*L0u,*L1u,*L2u,*L3u,*L4u,*L5u,*L6u,*L7u,*L8u,*L9u; L0p=L0u=NULL; L1p=L1u=NULL; L2p=L2u=NULL; L3p=L3u=NULL; L4p=L4u=NULL; L5p=L5u=NULL; L6p=L6u=NULL; L7p=L7u=NULL; L8p=L8u=NULL; L9p=L9u=NULL; cout<<" Creaza lista principala:"; cout<<endl<<"Introduceti numarul de elemente al listei : n= "; cin>>n; int n,i,x; for(i=1;i<=n;i++) { cout<<"Introduceti elementul al - "<<i<<" -lea al listei"; cin>>x; creare(&Lp,&Lu,x);} nod *p; int parc=maxim(Lp,Lu); int pas=parc; while(parc!=0) { for(p=Lp;p!=NULL;p=p->urm) if(extragerecif(p->info, pas-parc+1)==0) creare(&L0p,&L0u,p->info); else if(extragerecif(p->info, pas-parc+1)==1) creare(&L1p,&L1u,p->info); else if(extragerecif(p->info, pas-parc+1)==2) creare(&L2p,&L2u,p->info); else if(extragerecif(p->info, pas-parc+1)==3) creare(&L3p,&L3u,p->info); else if(extragerecif(p->info, pas-parc+1)==4) creare(&L4p,&L4u,p->info); else if(extragerecif(p->info, pas-parc+1)==5) creare(&L5p,&L5u,p->info); else if(extragerecif(p->info, pas-parc+1)==6) creare(&L6p,&L6u,p->info); else if(extragerecif(p->info, pas-parc+1)==7) creare(&L7p,&L7u,p->info); else if(extragerecif(p->info, pas-parc+1)==8) creare(&L8p,&L8u,p->info); else if(extragerecif(p->info, pas-parc+1)==9) creare(&L9p,&L9u,p->info); nod *t=Lp,*u; if(L0p!=NULL) {u=L0p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L1p!=NULL) {u=L1p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L2p!=NULL) {u=L2p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L3p!=NULL) {u=L3p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L4p!=NULL) {u=L4p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L5p!=NULL) {u=L5p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L6p!=NULL) {u=L6p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L7p!=NULL) {u=L7p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L8p!=NULL) {u=L8p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} if(L9p!=NULL) {u=L9p; while(u!=NULL) {Lp->info=u->info; Lp=Lp->urm; u=u->urm;}} Lp=t; printf("\nLa pasul %d listele sunt:\n",pas-parc+1); cout<<"Lista L0: "; afisare(L0p,L0u); cout<<endl; cout<<"Lista L1: "; afisare(L1p,L1u); cout<<endl; cout<<"Lista L2: "; afisare(L2p,L2u); cout<<endl; cout<<"Lista L3: "; afisare(L3p,L3u); cout<<endl; cout<<"Lista L4: "; afisare(L4p,L4u); cout<<endl; cout<<"Lista L5: "; afisare(L5p,L5u); cout<<endl; cout<<"Lista L6: "; afisare(L6p,L6u); cout<<endl; cout<<"Lista L7: "; afisare(L7p,L7u); cout<<endl; cout<<"Lista L8: "; afisare(L8p,L8u); cout<<endl; cout<<"Lista L9: "; afisare(L9p,L9u); cout<<endl; parc--; if(parc!=0) {L0p=L0u=NULL; L1p=L1u=NULL; L2p=L2u=NULL; L3p=L3u=NULL; L4p=L4u=NULL; L5p=L5u=NULL; L6p=L6u=NULL; L7p=L7u=NULL; L8p=L8u=NULL; L9p=L9u=NULL;} } cout<<endl; cout<<"Lista finala sortata este: "; afisare(Lp,Lu); return 0; //getch(); }
  14. One way in which our TextBox class is not very useful is that its instances do not contain any data when they are created, except for the static initialization of the variable $body_text. The point of such a class would be to display arbitrary pieces of text, not the same message every time. It's true that we could make an instance and then install the right data in the instance's internal variables, like so: $box=new TextBoxSimple; $box->body_text="custom text"; $box->display(); The correct way to arrange for data to be appropriately initialized is by writting a constructor function- a special function called__construct(), which will be called automatically whenever a new instance is created. Example: ?php class TextBox{ var $body_text="my text"; //constructor function function__construct($text_in) { $this->body_text=$text_in; } function display() { print("<table border=1><tr><td>$this->body_text"); print("</td></tr></table>"); } } //creating an instance $box=new TextBox("custom text"); $box->display(); As the preceding code is executed, the output is an HTML table enclosing the text "custom text".
  15. The general form for defining a new class in PHP is as follows: class myclass extends myparent{ var $var1; var $var2="constant string"; function myfunc($arg1, $arg2){ [...] } [...] } The special form class, followed by the name of the class that you want to define. An optional extensional clause, consisting of the word extends and then the name of the class that should be inherited from. A set of braces enclosing any number of the variable declarations and function definitions. Variable declarations start with the special form var, which is followed by a conventional $ variable name; they may also have an initial assignment to a constant value. Function definitions look much like standalone PHP functions but are local to the class. Example: <?php class textboxsimple{ var $body_text="my text"; function_display() { print("<table border=1><tr><td>$this->body_text"); print("</td></tr></table>"); } } ?> This is an extremely simple class definition. It has no parent(and, therefore, no extends clause). It has a single memebervariable(the variable $body_text), and a single member function(the function display()).The display function simply prints out the text variable, wrapped up in an HTML table definition.
  16. Se creeaza un arbore binar de cautare. Sa se stearga un nod dat. In exemplul de mai jos am folosit instructiunea switch pentru 1.inserare, 2.parcurgere, 3.stergere Obs: dupa stergerea unui nod care are o anumita cheie, arborele ramas trebuie sa fie de cautare. #include<iostream.h> #include<conio.h> struct nod{ int info; nod *dr, *st; }; nod *v, *aux; int n; int opt; //creeaza arborele binar de cautare void inserare(nod *&c, int n) { if(c) if(c->info==n) cout<<"nod deja inserat. inserati altul!"; else if(c->info<n) inserare(c->st, n); else inserare(c->dr, n); else { c=new nod; c->dr=c->st=0; c->info=n; } } void parcurg(nod *c) { if(c) { parcurg(c->dr); cout<<c->info<<" "; parcurg(c->st); } } //in cazul in care un nod care urmeaza a fi sters, subordoneaza doi arbori, se apeleaza functia _supl void functie_supl(nod *&c, nod *&f) { if(f->st) functie_supl(c, f->st); else { c->info=f->info; aux=f; f=f->dr; delete aux; } } //pe langa cele 3 cazuri(nod din subarborele stang care nu subordoneaza nici un alt arbore, nod din subarborele stang care subordoneaza un subarbore-drept, // nod din subarborele drept-cel mai din dreapta nod al subarborelui stang, // in ultimul caz: nod din subarborele drept-cel mai din dreapta nod al subarborelui stang //se identifica nodul cel mai din dreapta din subarborele stang(care este cu cheia cea mai mare din acest subarbore //cheia acestuia trece in locul cheii nodului care se sterge //aceasta este mai mica decat cheia initiala (ptr ca se gaseste in subarborele stang) este in acelasi timp cea mai mare din subarborele stang //deci este cea mai mare cheie din subarborele stang care este mai mica decat cheia care se sterge void sterg(nod *&c, int n) { nod *f; if(c) if(c->info==n) if(c->dr==0 && c->st==0) { delete c; c=0; } else if(c->dr==0) { f=c->st; delete c; c=f; } else if(c->st==0) { f=c->dr; delete c; c=f; } else functie_supl(c, c->dr); else if(c->info<n) sterg(c->st, n); else sterg(c->dr, n); else cout<<"eroare"; } void main() { v=0; do{ cout<<"dati optiune:"; cin>>opt; switch(opt) { case 1: cout<<"dati nodul: "; cin>>n; inserare(v, n); break; case 2: parcurg(v); break; case 3: cout<<"dati nodul pe care il sterg: "; cin>>n; sterg(v, n); break;} }while(opt!=4); getch(); }
  17. 1. Breadth first: Se citeste matricea de adiacenta a unui graf orientat(nu are bucle, adica de la un nod i la un nod j exista o singura muchie (i,j)). Se cere pacurgerea lui in latime. Parcurgerea in latime se face incepand de la un anumit nod i, pe care il consideram parcurs. Parcurgem apoi toti descendentii sai. Parcurgem toti descendentii nodurilor parcurse la pasul anterior. Un nod este parcurs o singura data. Parcurgerea BF se efctueaza prin utilizarea structurii numita coada, avand grija ca un nod sa fie vizitat o singura data. Coada va fi alocata prin utilizarea unui vector. #include<iostream.h> #include<conio.h> int coada[50], s[50], a[50][50], i_c, sf_c, i, n; //i_c indicele cozii care urmeaza a fi prelucrata //sf_c ultima componenta a cozii //s vectorul boolean ce retine nodurile introduse in coada //0 daca nodul i nu a fost introdus in coada, 1 altfel void bf() { int k; if(i_c<=sf_c) { for(k=1; k<=n; k++) if((a[coada[i_c]][k]==1) && (s[k]==0)) { sf_c++; coada[sf_c]=k; s[k]=1; } i_c++; bf(); } } void main() { cout<<"n="; cin>>n; int i, j; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } i_c=sf_c=1; coada[i_c]=s[1]=1; bf(); for(i=1; i<=sf_c; i++) cout<<coada[i]<<" "; getch(); } Exista mai multe solutii ale unei astfel de parcurgeri, pentru ca ordinea de parcurgere a descendentilor unui nod nu este impusa. Ea depinde si de modul in care a fost memorat graful. 2.Depth first Se citeste matricea de adiacenta a unui graf orientat(nu are bucle, adica de la un nod i la un nod j exista o singura muchie (i,j)). Se cere pacurgerea lui in adancime. Parcurgerea in adncime se face incepand de la un anumit nod i. Dupa parcurgerea unui nod se trece la primul dintre descendentii sai,neparcursi inca. #include<iostream.h> #include<conio.h> int a[20][20], s[20], n; void df(int nod) { int k; s[nod]=1; for(k=1; k<=n; k++) if((a[nod][k]==1 && (s[k]==0)) df(k); } void main() { int i, j; cout<<"dati nr de noduri: "; cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cout<<"a["<<i<<"]["<<j<<"]=" cin>>a[i][j]; } cout<<endl; df(1); getch(); } Principalele modalitati de parcurgere ale unui arbore binar sunt: 1. Parcurgerea in inordine(SVD)- se parcurge mai intai subarborele stang, apoi varful, apoi subarborele drept. 2. Parcurgerea in preordine(VSD)- se parcurge mai intai varful, apoi subarborele stang, apoi cel drept. 3. Parcurgerea in postordine(SDV)- se parcurge mai intai subarborele stang, apoi subarborele drept, apoi varful. 4. DF care a fost prezentata si mai sus. #include<iostream.h> #include<conio.h> struct nod{ int nr; nod *st, *dr; }; nod *c; void sdv(nod *c) { if(c) { sdv(c->st); sdv(c->dr); cout<<c->nr; } } void svd(nod *c) { if(c) { svd(c->st); cout<<c->nr; svd(c->dr); } } void vsd(nod *c) { if(c) { cout<<c->nr; vsd(c->st); vsd(c->dr); } } nod *arbore() { int n; nod *c; cout<<"n="; cin>>n; if(n) { c=new nod; c->nr=n; c->st=arbore(); c->dr=arbore(); return c; } else return 0; } void main() { c=arbore(); vsd(c); cout<<endl; svd(c); cout<<endl; sdv(c); getch(); }
      • 1
      • Upvote
  18. //verifica daca un cuvant este sau nu palindrom #include<iostream.h> #include<conio.h> typedef struct elem { char info[1]; elem *st,*dr;} *adr; char n[25]; void creare(adr &cap,adr &sf) { cout<<"Cuvantul este ";cin>>n; int i; i=0; if(n[i]!='\0') { adr l=new elem; //se aloca spatiu in Heap l->st=l->dr=NULL; l->info[0]=n[i]; l->info[1]='\0'; i++; cap=sf=l; while(n[i]!='\0') { l=new elem; l->info[0]=n[i]; l->info[1]='\0'; i++; l->dr=NULL; l->st=sf; sf->dr=l; sf=l; } } } //se porneste in ambele sensuri de parcurgere inceput--sfarsit, sfarsit--inceput int palindrom(adr cap,adr sf) { int stop=0; adr l,l1; for(l=cap,l1=sf;l && l1 && l!=l1 && !stop;l=l->dr,l1=l1->st) if(l->info[0]!=l1->info[0]) stop=1; return(!stop); } void main() { adr cap,sf; creare(cap,sf); if(palindrom(cap,sf)) cout<<n<<" este palindrom."<<endl; else cout<<n<<" nu este palindrom."<<endl; getch(); }
  19. Considerandu-se o tabla de sah de dimansiune NXN, sa se determine toate modalitatile de amplasare a n regine pe tabla de sah astfel incat sa nu se atace doua cate doua(doua regine se ataca daca se afla pe aceeasi linie, coloana, sau diagonala). #include<iostream.h> #include<math.h> #include<conio.h> int x[50],k,valid,n,m,nr; void citire() { cout<<"n=";cin>>n; } void posibil(int k,int &valid) { valid=1; for(int i=1;i<=k-1;i++) if(abs(x[i]-x[k])==abs(i-k)||(x[i]==x[k])) valid=0; /*doua dame nu se pot afla pe aceiasi linie (k), aceiasi coloana (x[k]) sau aceiasi diagonala*/ } int solutie(int k) { if(k==n)return 1; else return 0; } void afisare(int k) { nr++; cout<<"solutia "<<nr<<endl; for(int i=1;i<=k;i++){ for (int j=1;j<=k;j++) if (x[i]==j) cout<<"D"<<" "; else cout<<"*"<<" "; cout<<endl; }} void back() { k=1; x[k]=0; while(k>0) { valid=0; while(!valid && x[k]<n) { x[k]=x[k]+1; posibil(k,valid); } if(!valid)k--; else if(solutie(k)) afisare(k); else { k++; x[k]=0; } } } void main() { citire(); nr=0; back(); getch(); }
      • 1
      • Upvote
  20. 1. Graf_partial Sa se scrie un program care citeste de la tastatura o matrice de adiacenta asociata grafurilor g si g`,cu cate n noduri fiecare si verifica daca g` este partial pentru g. #include<iostream.h> int a[20][20], b[20][20],n; void citire(int x[20][20]){ for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]="; cin>>x[i][j];}} int partial() {for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) if((b[i][j]==i)&&(a[i][j]==0)) return 0; return 1;} void main() {cout<<"n=";cin>>n; citire(a);citire(b); if(partial()) cout<<"graful g` este partial pentru g"; else cout<<"nu este";}
  21. 177-permutari de n elem. 178-siruri de cifre cu cifrele 1, 2, 3, 4 179-secvente de n litere 180-combinari de n luate cate k 181-combinari de n luate cate k-var.generalizat 182-aranjamente de n luate cate k 183-produs cartezian a n multimi 184-produs cartezian a n cuvinte 185-fotografia unui obiect 177. #include<iostream.h> #include<stdio.h> int st[25], n; void initializari() { int i; cout<<"n="; cin>>n; for(i=1; i<=25; i++) st[i]=0; } void tipar(int p) { int j; for(j=1; j<=p; j++) cout<<st[j]<<" "; cout<<endl; } int valid(int p) { int i, ok=1; for(i=1; i<=p-1; i++) if(st[p]==st[i]) ok=0; return ok; } void bktr(int p) { int pval; for(pval=1; pval<=n; pval++) { st[p]=pval; if(valid(p)) if(p==n) tipar(p); else bktr(p+1); } } void main() { initializari(); bktr(1); } 178. #include<iostream.h> #include<conio.h> int st[30], n; void initializare() { int i; for(i=1; i<=30; i++) st[i]=0; } void tipar(int p) { int j; for(j=1; j<=p; j++) cout<<st[j]<<" "; cout<<endl; } int validare(int p) { int i; int ok=1; for(i=1; i<=p-1; i++) if((st[p]%2==0 && st[p-1]!=0) || (st[p]%2 !=0 && st[p-1]==0)) ok=0; return ok; } void bktr(int p) { int pval; for(pval=1; pval<=n; pval++) { st[p]=pval; if(validare(p)) if(p==n) tipar(p); else bktr(p+1); } } void main() { initializare(); bktr(1); getch(); } 179. #include<iostream.h> #include<conio.h> #include<math.h> #include<string.h> #include<stdio.h> char st[1000]; int n; void initializare() { int i, l; l=strlen(st); for(i=1; i<=l; i++) st[i]=' '; } void tipar(int p) { int j; for(j=1; j<=p ;j++) puts(st); puts(" "); puts("\n"); } int valid(int p) { int i, ok=1; for(i=1; i<=p-1; i++) if(abs(st[p]-st[p-1]) !=1 && st[p]==st[i]) ok=0; return ok; } void bktr(int p) { int pval; for(pval='A'; pval<='Z'; pval++) { st[p]=pval; if(valid(p)) if(p==n) tipar(n); else bktr(p+1); } } void main() { initializare(); bktr(1); getch(); } 180. #include<iostream.h> #include<conio.h> int st[40], n, k; void initializare() { int i; for(i=1; i<=40; i++) st[i]=0; do{ cout<<"n="; cin>>n; cout<<endl<<"k="; cin>>k; }while(n<k); } void tipar(int p) { int j; for(j=1; j<=p; j++) cout<<st[j]<<" "; cout<<endl; } int validare(int p) { int i; if(p>1 && st[p]<=st[p-1]) return 0; else return 1; } void bktr(int p) { int pval; for(pval=1; pval<=n; pval++) { st[p]=pval; if(validare(p)) if(p==k) tipar(p); else bktr(p+1); } } void main() { initializare(); bktr(1); getch(); } 181. #include<iostream.h> #include<conio.h> int st[40], n, k; void bktr(int p) { int i, pval; for(pval=st[p-1]+1; pval<=n; pval++) { st[p]=pval; if(p==k) { for(i=1; i<=p; i++) cout<<st[i]<<" "; cout<<endl; } else bktr(p+1); } } void main() { cout<<"n="; cin>>n; cout<<endl<<"k=" ;cin>>k; st[0]=0; bktr(1); } 182. #include<iostream.h> #include<stdio.h> #include<conio.h> int st[500], n, k; FILE *f; void initializare() { int i; for(i=1; i<=500; i++) st[i]=0; do{ cout<<"n="; cin>>n; cout<<endl<<"k="; cin>>k; }while(n<k); } void tipar(int p) { int j; for(j=1; j<=p; j++) fprintf(f, "%d \n", st[j]); } int valid(int p) { int i; if(st[p]<=st[p-1] && st[p]>=st[p-1]) return 0; else return 1; } void bktr(int p) { int pval; for(pval=1; pval<=n; pval++) { st[p]=pval; if(valid(p)) if(p==k) tipar(p); else bktr(p+1); } } void main() { //in exemplul nostru fisierul este "aranjamente.txt" initializare(); f=fopen("aranjamente.txt", "w"); //se deschide pentru scriere bktr(1); getch(); fclose(f); } 183. #include<iostream.h> #include<conio.h> int st[50], nr[50], n; void initializare() { int i; cout<<"n="; cin>>n; for(i=1; i<=50; i++) st[i]=0; for(i=1; i<=n; i++) { cout<<endl<<"numarul de elemente al multimii "<<i<<": "; cin>>nr[i]; } } void tipar(int p) { int j; for(j=1; j<=p; j++) cout<<st[j]<<" "; cout<<endl; } int valid() { return 1; } void bktr(int p) { int pval; if(p==n+1) tipar(p-1); else for(pval=1; pval<=nr[p]; pval++) { st[p]=pval; if(valid()) bktr(p+1); } } void main() { initializare(); bktr(1); getch(); } 184. #include<iostream.h> #include<conio.h> #include<string.h> #include<stdio.h> int n, nr[40]; FILE *f; char st[20][30], st1[20]; void initializare() { int i; int l; cout<<"n="; cin>>n; for(i=1; i<=n; i++) { cout<<"numarul de caractere "<<i<<":"; cin>>st1[i]; l=strlen(st1); nr[i]=l; st1[i]=' '; } } void tipar(int p) { int j; for(j=1; j<=p ;j++) fprintf(f, "%c \n", st[st1[j]][j]); } int valid() {return 1; } void bktr(int p) { int pval; for(pval=1; pval<=nr[p]; pval++) { st1[p]=pval; if(valid()) if(p==n) tipar(p); else bktr(p+1); }} void main() { //in exemplul nostru fisierul este "cuvinte.txt" f=fopen("cuvinte.txt", "w"); //se deschide pentru scriere initializare(); bktr(1); getch(); fclose(f); }
  22. 163-maximul dintr-un sir 166-cautare binara intr-un sir 169-turnurile din hanoi 163. #include<iostream.h> #include<conio.h> int x[20], n, i; int div_imp(int p, int q) { int mij, max1, max2; if(p==q) return x[p]; else { mij=(p+q)/2; max1=div_imp(p, mij); max2=div_imp(mij+1, q); if(max1>max2) return max1; else return max2; } } void main() { cout<<endl<<"n="; cin>>n; for(i=0; i<=n-1; i++) { cout<<"x["<<i<<"]="; cin>>x[i]; } cout<<endl<<"valoarea maxima este: "<< div_imp(0, n-1); } 166. #include<iostream.h> int x[20], a, i, n; int div_imp(int p, int q) { int mij; if(q<p) return 0; else { mij=(p+q)/2; if(x[mij]==a) return 1; else if(a<x[mij]) return div_imp(p, mij-1); else return div_imp(mij+1, q); } } void main() { cout<<endl<<"n="; cin>>n; cout<<endl<<"x[0]="; cin>>x[0]; for(i=1; i<=n; i++) do { cout<<"x["<<i<<"]="; cin>>x[i]; }while(x[i]<=x[i-1]); cout<<endl<<"a="; cin>>a; if(div_imp(0, n-1)) cout<<endl<<"valoarea cautata este in vector!!!!!"; else cout<<endl<<"nu se afla in vector! porry!!"; } 169. #include<iostream.h> #include<stdio.h> #include<conio.h> int n; char x, y, z; void hanoi(int n, char x, char y, char z) { if(n==1) cout<<endl<<x<<y; else { hanoi(n-1, x, z, y); cout<<endl<<x<<y; hanoi(n-1, z, y, x); } } void main() { cout<<endl<<"dati nr de discuri: "; cin>>n; hanoi(n, 'x', 'y', 'z'); getch(); }
      • 1
      • Upvote
  23. 140-sirul lui fibonacci 144-cel mai mare divizor comun 145-suma cifrelor unui nr 146-inversarea unui cuvant 147-numere cu maxim de cifre distincte 140. #include<iostream.h> #include<conio.h> int F[20], n; long fib(int k) { if(k==1 || k==2) return 1; else return fib(k-1)+fib(k-2); } void main() { cout<<"n="; cin>>n; if(n>0) cout<<endl<<"termenul nr. "<< n<<"este "<<fib(n); } 144. #include<iostream.h> int a, b; int cmmdc(int a, int b) { if(a==b) return a; else if(a>b) return cmmdc(a-b, b); else return cmmdc(a, b-a); } void main() { cout<<"dati numerele: "; cin>>a>>b; if(a>0 && b>0) cout<<"cmmdc= "<<cmmdc(a, b); else cout<<"nu pot calcula cmmdc!!!"; } 145. #include<iostream.h> int suma(long x) { if(x==0) return 0; else return x%10+suma(x/10); } void main() { int x; cout<<endl<<"dati nr: "; cin>>x; cout<<endl<<"suma cifrelor lui"<< x <<" este "<<suma(x); } 146. #include<iostream.h> #include<stdio.h> #include<conio.h> void inv() { char c; scanf("%c", &c); if(c!=' ') inv(); printf("%c", c); } void main() { inv(); getch(); } 147. #include<iostream.h> #include<conio.h> int a[20], max, k; int test(int c, int a[20], int k) { int i, gasit=0; for(i=1; i<=k; i++) if(c==a[i]) gasit=1; return gasit; } int nr_cif(int x, int a[20], int &k) { int c; if(!x) return 0; else { c=x%10; if(test(c, a, k)) return nr_cif(x/10, a, k); else { k++; a[k]=c; return 1+nr_cif(x/10, a, k); } } } void citire() { int x, n, i; cin>>x; if(x) { k=0; for(i=1; i<=20; i++) n=nr_cif(x, a, k); if(n>max) max=n; citire(); if(n==max) cout<<x<<" "; } } void main() { cout<<endl; max=0; cout<<endl<<"dati numerele separate prin 0(incheiati cu enter)"<<endl; citire(); getch(); }
  24. 113-max dintre mediile aritmetice a doua perechi de nr 114-ordonarea a trei numere 115-(bacalaureat aug.2000, varianta2) 116-(bacalaureat iulie, varianta2) 119-platouri de lungime maxima 113. #include<iostream.h> float m1, m2, a1, a2, b1, b2; void calcul_media(float x, float y, float &m) { m=(x+y)/2; cout<<"media este: "<< m; } void main() { cout<<"a1, b1= "; cin>>a1>>b1; calcul_media(a1, b1, m1); cout<<"a2, b2= "; cin>>a2>>b2; calcul_media(a2, b2, m2); if(m1>=m2) cout<<endl<<m1; else cout<<endl<<m2; } 114. #include<iostream.h> int a, b, c; void interschimbare(int &x, int &y) { int interm; interm=x; x=y; y=interm; } void main() { cout<<endl<<"dati nr: "; cin>>a>>b>>c; if(a>b) interschimbare(a, b); if(a>c) interschimbare(a, c); if(b>c) interschimbare(b, c); cout<<endl<<"nr dupa re_aranjare: "<<a<<" "<<b<<" "<<c; } 115. #include<iostream.h> #include<stdio.h> int n, v[40]; FILE *f, *g; void interschimbare(int &x, int &y) { int interm; interm=x; x=y; y=interm; } void citire() { int i; f=fopen("ceva.txt", "r"); while(!feof(f)) { fscanf(f, "%d ", &v[i]); i++; n=i; fclose(f); } } void main() { int i, j; citire(); g=fopen("altceva.txt", "w"); for(i=0; i<=n-1; i++) for(j=i+1; j<=n-1; j++) if(v[i]>v[j]) interschimbare(v[i], v[j]); for(i=0; i<=n-1; i++) fprintf(g, "%d \n", v[i]); fclose(g); } 116.#include<iostream.h> #include<values.h> int a[20], b[20], i, nr, M; void citire(int v[20], int n) { for(i=1; i<=n; i++) { cout<<"elem de pe pozitia" <<i<<"="; cin>>v[i]; } } int de_minim(int v[20], int n) { int min=MAXINT; for(i=1; i<=n; i++) if(v[i]<min) min=v[i]; return min; } void main() { cout<<"citim vectorul a: \n"; citire(a, 10); cout<<"citim vectorul a: \n"; citire(b, 8); M=de_minim(b, 8); for(nr=0, i=1; i<=10; i++) if(a[i]<M) nr++; cout<<endl<<"nr="<<nr; } 119. #include<iostream.h> #include<values.h> int v[25], i, n, L_max; void citire_vector() { cout<<endl<<"n="; cin>>n; for(i=1; i<=n; i++) { cout<<"elem de pe pozitia"<<i<<"= "; cin>>v[i]; } } int det_lungime_maxima() { int lung, lung_max, p, q; lung_max=0; i=1; while(i<=n) {p=i; while(i<=n && v[i+1]==v[i]) i++; q=i; lung=q-p+1; if(lung>lung_max) lung_max=lung; i++; } return lung_max; } void afisare_platouri() { L_max=det_lungime_maxima(); cout<<endl<<"Platourile de lungime maxima au lungimea: "<<L_max; if(L_max==1) cout<<endl<<"nu exista platouri!!!"; else { i=1; while(i<=n) if(v[i+L_max-1]==v[i]) { cout<<endl<<"platou max. intre poz. "<<i<<" "<<i+L_max-1; i+=L_max; } else i++; } } void main() { citire_vector(); afisare_platouri(); }
      • 1
      • Upvote
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.