helping C


  1. #1
    Rocker morbid_boy's Avatar morbid_boy reprezinta o cantitate neglijabila
    Data de inscriere
    02-07-2006
    Locaţie
    timisoara :D
    Varsta
    35
    Sex
    M
    Mesaje
    1,736
    Mesaje bazar
    186
    Putere Reputatie
    45
    Reputatie
    10
    Puncte CF
    17.0
    Usergroups:

    helping C

    Am deschis acest thread pentru cei care nu vor doar comert ...ci pentru cei care vor sa ajute si sa fie ajutati cu diferite probleme in C....sau alte limbaje de programare....

    as incepe eu...dar tocmai mi'am dat seama ce nu imi merge ....

    oricum....daca aveti nevoie de ajutor...postati aici...poate va ajuta cineva
    Oare cum miros morcovii daca nu au nas?

  2. #2
    Oldtimer casperschi are ceva special... casperschi are ceva special...
    Data de inscriere
    09-02-2008
    Varsta
    41
    Sex
    M
    Mesaje
    1,130
    Mesaje bazar
    153
    Putere Reputatie
    38
    Reputatie
    136
    Puncte CF
    40.0
    Usergroups:
    din pacate sectiunea de pl este una din cele mai putin frecventate de pe forum, din cate am vazut...
    ar fi frumos sa fie ceva mai frecventata, dar din pacate toti cei care au intrebari se duc pe forumurile consacrate.
    au mai fost cateva incercari prin romania, dar au esuat toate... it's just not meant to be.
    mutton power!!!
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

  3. #3
    Newcomer julia_heaton's Avatar julia_heaton reprezinta o cantitate neglijabila
    Data de inscriere
    02-10-2007
    Varsta
    35
    Sex
    M
    Mesaje
    46
    Mesaje bazar
    14
    Putere Reputatie
    34
    Reputatie
    17
    Puncte CF
    0.0
    Usergroups:

    Cateva probleme rezolvate in C/C++

    Arbori B
    #include <stdio.h>
    #include <conio.h>
    #include <malloc.h>
    #include <ctype.h>
    #define m 4

    typedef struct pag
    {
    int nr;
    int key[m+1];
    pag *nod[m+1];
    }ppag;

    char ch;
    int key,Nnod,ind,urc,v,x,h,gasit,nou;
    ppag *rad,*adr,*purc,*pv;

    //copiaza inf din pagina r incepand cu indicele is in pagina dest incepand cu indicele id
    void Copie(ppag *dest,ppag *r,int is,int id, int n)
    {
    while(n>0)
    {
    n--;
    dest->key[id+n]=r->key[is+n];//cheile
    dest->nod[id+n]=r->nod[is+n];//adresele descendentilor
    }
    }
    //insereaza cheia x in pagina r pe pozitia k din vectorul cheilor
    void Insert(ppag *r,int k)
    {
    int m_div_2,j;
    m_div_2=r->nr/2;
    if(r->nr==m)//trebuie fisionata pagina
    {
    pv=(ppag *)malloc(sizeof(ppag));
    pv->nr=m_div_2;
    r->nr=m_div_2;
    if(k>m_div_2)//semipagina dreapta
    {
    if(k==m_div_2+1)
    {
    Copie(pv,r,m_div_2+1,1,m_div_2);
    pv->nod[0]=purc;
    }
    else //urca elementul key[n+1]
    {
    k=k-m_div_2-1;
    Copie(pv,r,m_div_2+2,1,k-1);
    pv->key[k]=urc;
    pv->nod[k]=purc;
    Copie(pv,r,m_div_2+k+1,k+1,m_div_2-k);
    pv->nod[0]=r->nod[m_div_2+1];
    urc=r->key[m_div_2+1];
    }
    }
    else //semipagina stanga
    {
    Copie(pv,r,m_div_2+1,1,m_div_2);
    pv->nod[0]=r->nod[m_div_2];
    v=r->key[m_div_2];
    Copie(r,r,k,k+1,m_div_2-k);
    r->nod[k]=purc;
    r->key[k]=urc;
    urc=v;
    }
    purc=pv;
    }
    else //incape in pagina curenta
    {
    h=0;
    r->nr=r->nr+1;
    Copie(r,r,k,k+1,r->nr-k);
    r->nod[k]=purc;
    r->key[k]=urc;
    if(urc==x)
    {
    ind=k;
    adr=r;
    }
    }
    }
    //cauta locul keii x in pagina curenta r si se insereaza in locul corespunzator
    void Caut(ppag *r)
    {
    int k;
    if(r==NULL)//nu a fost gasit
    {
    h=1;
    nou=1;
    urc=x;
    purc=NULL;
    }
    else //cautam pe pagina curenta
    {
    k=1;
    gasit=0;
    while ((k<=r->nr)&&(!gasit))
    {
    gasit=(r->key[k]>=x);
    k++;
    }
    if(gasit)
    k--;//a fost gasit
    if(k>r->nr) gasit=0;
    else
    gasit=(r->key[k]==x);
    if(gasit)
    {
    nou=0;
    adr=r;
    ind=k;
    h=0;
    }
    else
    {
    Caut(r->nod[k-1]);//se continua cautarea
    if
    Insert(r,k); //se insereaza k in pagina r
    }
    }
    }
    //insereaza keya key citita in arborele B si va returna pointerul corespunzator radacinii
    ppag *Cauta(int key)
    {
    x=key;//cauta incepand din radacina locul de inserat al keii x
    Caut(rad);
    if
    {
    pv=(ppag *)malloc(sizeof(ppag));
    pv->nod[0]=rad;
    pv->nod[1]=purc;
    pv->key[1]=urc;
    pv->nr=1;
    rad=pv;
    }
    if(x==urc)
    {
    adr=rad;
    ind=1;
    }
    return rad;
    }
    //procedura de afisare a arborelui B
    void Tiparire(ppag *rad,int nivel)
    {
    if(rad!=NULL)
    {
    for(int j=1;j<=nivel;j++)
    printf(". ");
    for(j=1;j<=rad->nr;j++)
    printf("%d ",rad->key[j]);
    printf("\n");
    /*gotoxy(20,wherey());*/
    for(j=0;j<=rad->nr;j++)
    Tiparire(rad->nod[j],nivel+1);
    }
    }
    //procedura de inserare a unui nod nou
    void InsertNod(ppag *rad,int i)
    {
    int x;
    char ch;
    do
    {
    printf("Doriti sa inserati? <y/n>");
    ch=toupper(getch());
    printf("\n");
    if(ch!='N')
    {
    i++;
    printf("Introduceti cheia:");
    scanf("%d",&x);
    rad=Cauta(x);
    /*clrscr();
    gotoxy(20,5);*/
    printf("Arborele B este:\n\n");
    /*gotoxy(20,10);*/
    Tiparire(rad,0);
    /*gotoxy(1,25);*/
    }
    }while(ch!='N');
    /*gotoxy(wherex(),wherey()-1);
    delline();*/
    }
    //proceduard e cautare a unui nod in arborele B
    int CautNod(int keia,ppag *r)
    {
    int i,gasit;
    if(r==NULL) return 0;/*nu exista daca nu s-a terminat cautarea,se cauta in pagina
    curenta se trece la urmatoarea pagina daca nu s-a gasit in pagina curenta */
    else
    {
    i=1;
    gasit=0;
    while((i<=r->nr)&&(!gasit))
    {
    gasit=(r->key[i]>=keia);
    i++;
    }
    if(gasit)i--;
    if(i>r->nr) gasit=0;
    else gasit=(r->key[i]==keia);
    }
    if(gasit)
    return 1;
    else
    return CautNod(keia,r->nod[i-1]);

    }
    /*Procedura de tiparire intr-un interval,se presupune a<b
    void Tiparire_Interval(int a,int b)
    {
    for(int i=a;i<=b;i++)
    if(CautNod(i,rad)) printf("%d ",i);
    }*/
    //procedura principala
    int main()
    {
    //int a,b;
    /*clrscr();*/
    Nnod=0;
    nou=1;
    rad=NULL;
    do
    {
    printf("Creati nod<y/n>");
    ch=toupper(getch());
    printf("\n");
    if(ch!='N')
    {
    Nnod++;
    printf("Introduceti cheia=");scanf("%d",&key);
    rad=Cauta(key);
    }
    }
    while(ch!='N');
    /*clrscr();
    gotoxy(20,5);*/
    printf("Arborele B este:\n\n");
    /*gotoxy(20,10);*/
    Tiparire(rad,0);
    /*gotoxy(1,25);*/
    do
    {
    printf("Doriti [I]nserare sau E[x]it");
    ch=toupper(getch());
    printf("\n");
    /*gotoxy(wherex(),wherey()-1);
    delline();*/
    switch(ch)
    {
    case'I':InsertNod(rad,Nnod);break;
    }
    }while(ch!='X');
    /*clrscr();
    printf("Dati intervalul [a,b] in care se doreste tiparirea\n");
    printf("a=");scanf("%d",&a);
    printf("b=");scanf("%d",&b);
    Tiparire_Interval(a,b);*/
    getchar();
    getchar();
    return 1;
    }

    Arbore binar de cautare
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h>

    struct arb{
    char info;
    arb *st,*dr;
    }*rad,*r;

    arb *creare(arb *rad,arb *r,char info){
    if (!r){
    r=(arb*) malloc (sizeof(arb));
    r->st=NULL;
    r->dr=NULL;
    r->info=info;
    if(!rad) return r;
    if(info<rad->info) rad->st=r;
    else rad->dr=r;
    return r;
    }
    if(info<r->info) creare(r,r->st,info);
    else creare(r,r->dr,info);
    }
    void afisare(arb *r, int l){
    int i;
    if (r==NULL) return;
    afisare(r->dr,l+1);
    for(i=0;i<l;++i) printf(" ");
    printf("%c\n",r->info);
    afisare(r->st,l+1);
    }
    void main(){
    char c;
    rad=NULL;
    do{
    printf("\nInformatia: ");c=getche();
    if(!rad) rad=creare(rad,rad,c);
    else creare(rad,rad,c);
    }while(c!='0');
    printf("\n\nAfisare arbore: \n");
    afisare(rad,NULL);
    }

    Arbori AVL
    #include<iostream.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<stdio.h>

    struct nod
    {
    int key;
    int ech;
    nod *left, *right;
    };

    nod * rad;

    void drum(nod* p,int &max,int lung){
    if (p!=NULL){
    drum(p->right,max,lung+1);
    if ((p->left==NULL)&&(p->right==NULL)&&(max<lung)) max=lung;
    drum(p->left,max,lung+1);
    }
    }

    void fact_ech(nod *p){
    int max1,max2;
    max1=1; max2=1;
    if(p->left!=NULL) drum(p->left,max1,1);
    else max1=0;
    if(p->right!=NULL) drum(p->right,max2,1);
    else max2=0;
    p->ech=max2-max1;
    }

    nod* s_rot_left(nod *p){
    nod* q;
    q=p->right;
    p->right=q->left;
    q->left=p;
    fact_ech(p);
    fact_ech(q);
    p=q;
    return p;
    }

    nod* s_rot_right(nod *p){
    nod* q;
    q=p->left;
    p->left=q->right;
    q->right=p;
    fact_ech(p);
    fact_ech(q);
    p=q;
    return p;
    }

    nod* d_rot_left(nod *p){
    p->right = s_rot_right(p->right);
    p = s_rot_left(p);
    return p;
    }

    nod* d_rot_right(nod *p){
    p->left = s_rot_left(p->left);
    p = s_rot_right(p);
    return p;
    }

    nod* echilibrare(nod *p){
    nod *w;
    fact_ech(p);
    if(p->ech==-2){
    w=p->left;
    if (w->ech==1) p = d_rot_right(p);
    else p = s_rot_right(p);
    }
    else
    if(p->ech==2){
    w=p->right;
    if (w->ech==-1) p = d_rot_left(p);
    else p = s_rot_left(p);
    }
    return p;
    }

    nod* insereaza(nod *p,int x){
    if(p==NULL){
    p=new nod;
    p->key=x;
    p->ech=0;
    p->right=NULL;
    p->left=NULL;
    return p;
    }
    else
    if (x<p->key) p->left = insereaza(p->left,x);
    else
    if (x>p->key) p ->right = insereaza(p->right,x);
    else printf("Nodul exista deja");
    p = echilibrare(p);

    }

    void afisare_nivel(nod* p,int l){
    if (p!=NULL){
    afisare_nivel(p->right,l+7);
    for (int i=0;i<l;i++)
    cout<<" ";
    cout<<p->key<<"("<<p->ech<<")"<<endl;
    afisare_nivel(p->left,l+7);
    }

    }

    void main(void){
    int x;
    system("cls");
    rad = NULL;
    do{
    printf("Numarul : ");
    scanf("%d",&x);
    if (x!=0) rad = insereaza(rad,x);
    }while (x!=0);
    printf("\n\n\n");
    afisare_nivel(rad,0);
    getch();



    }
    Arbori binari
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <conio.h>

    typedef struct arbore {
    int key;
    struct arbore *right, *left;
    } pnod;
    pnod *rad;
    char c;
    int h;
    pnod *creare()
    {
    int i;
    pnod *p;
    printf("Introduceti informatia: ");
    scanf("%d", &i);
    if(i!=0){p=(pnod*) malloc (sizeof(pnod));
    p->key=i;
    p->left=creare();
    p->right=creare();
    }
    else p=NULL;
    return(p);
    }
    void afisare(pnod *p, int h){if(p!=NULL){
    afisare(p->right,h+2);
    for (int i=0;i<h;i++)
    {
    printf(" ");
    }
    printf("%d\n",p->key);
    afisare(p->left,h+2);
    }
    }
    void main()
    {
    afisare(creare(),0);
    }
    Liste

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <conio.h>

    typedef struct lista {
    int nr;
    char info;
    struct lista *urm;
    }plist;

    plist *p,*p1,*p0;
    int vect[10],c,v,x,i,temp;



    void creare(){
    printf("Dati nr de elemente din lista ");
    scanf("%d",&v);

    for(i=1;i<=v;i++){
    printf("Dati v[%d]=",i);
    scanf(" %d",&vect[i]);
    }

    p=(plist*) malloc (sizeof(plist));
    p->nr=vect[1];
    p->info=1;
    p->urm=NULL;
    p0=p;


    for (i=2;i<=v;i++){
    p1=(plist*) malloc (sizeof(plist));
    p1->nr=vect[i];
    p1->info=i;
    p1->urm=NULL;
    p->urm=p1;
    p=p1;
    }
    }



    void afisare(){
    printf("\nAfisarea listei\n");
    p=p0;
    while (p!=NULL){
    printf("nr. %d info %d\n", p->info, p->nr);
    p=p->urm;
    }
    }


    void main(){
    do{
    printf("\n1.Creare\n2.Afisare\n Optiunea aleasa = ");
    scanf("%d", &c);

    switch (c){
    case 1: creare();break;
    case 2: afisare();break;

    }
    }while (c!=0);
    }


    PS1:sper ca v-am ajutat la unele probleme
    PS2aca gasiti erori ma pute-ti contacta pe id mystycall2005
    save the planet killyourself

  4. #4
    Banned funjordan's Avatar funjordan a avut ceva conflicte in trecut
    Data de inscriere
    17-12-2009
    Varsta
    34
    Sex
    M
    Mesaje
    80
    Mesaje bazar
    347
    Putere Reputatie
    0
    Reputatie
    -1
    Puncte CF
    22.0
    arborii B aveti idee cum se implementeaza?

  5. #5
    Newcomer nicolae_cata reprezinta o cantitate neglijabila
    Data de inscriere
    18-09-2006
    Varsta
    44
    Sex
    M
    Mesaje
    27
    Mesaje bazar
    18
    Putere Reputatie
    36
    Reputatie
    10
    Puncte CF
    20.0
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

Google+

Cautati logo-ul CraiovaForum?

Iata cateva variante: