DATA STRUCTURES test nr. 2


  1. Pentru construirea unei structuri de tip graf:
    a) se aloca un masiv bidiemnsional int a[20][20]
    b) se utilizeaza o lista limpla
    c) se foloseste un vector si mai multe liste simple
    d) se construieste o lista de liste
    e) se foloseste o lista simpla unde informatia utila a fiecarui element contine definiri ale nodurilor si un pointer spre primul element al unei liste simple ce contine elemente de identificare a arcelor incidente spre exterior
  2. Daca s-a efectuat definirea:
    int a[10][10][10];
    a)referirea unui element oarecare se realizeaza cu expresia a[i][j][k]
    b)referirea unui element oarecare se realizeaza cu expresia *(*(a+i))+j)[k]
    c) referirea elementului de pe linia j si coloana j si inaltimea k se realizeaza cu expresia *(*(*(a+i)+j)+k)
    d) referirea unui element oarecare se realizeaza cu expresia *a[i][j]
    e) referirea unui element oarecare se realizeaza cu expresia ***a

  3. Prin secventele:
    struct LISTA_DUBLA {
    int info;
    struct LISTA_DUBLA *p_urmator;
    struct LISTA_DUBLA *p_precedent;
    }
    ..................
    struct LISTA_DUBLA
    var1={100, NULL, NULL},
    var2={200, NULL, NULL},
    var3={300,NULL, NULL},
    var4={400, NULL, NULL}, *p_caplista=NULL;

    a) s-a definit numai un tip de date de tip articol incorect pentru o lista dubla pentru ca pointerul p_precedent urmeaza pointerului p_urmator ceea ce afecteaza construirea expresiilor de referire a termenilor listei duble
    b) s-a definit tipul articol autoreferit prin doi pointeri si au fost initializate complet variabilele var1,var2,var3,var4 la definire
    c) sunt create conditii pentru a defini variabilele:
    struct lista_dubla var1, var2, var3, var4, *p_caplista; daca in prealabil s-a efectuat definirea:
    typedef struct LISTA_DUBLA lista_dubla;

    dupa care s-a incarcat o lista dubla cu 4 elemente
    d) sunt create conditii pentru a realiza lista dubla prin expresiile de atribuire:
    p_caplista=&var1;
    var1.p_urmator=&var2;
    var2.p_urmator=&var3;
    var3.p_urmator=&var4;

    e) sunt create conditii pentru a construi lista dubla prin secventa:
    p_caplista=&var1;
    var1.p_urmator=&var2;
    var1.precedent=NULL;
    var2.p_urmator=&var3;
    var2.precedent=&var1;
    var3.p_urmator=&var4;
    var3.precedent=&var2;
    var4.precedent=&var3;

  4. Inserarea unui element A pe pozitia K a unui masiv unidimensional
    cu 19 componente initializate, ,K<18 definit prin:
    int x[20];
    se realizeaza prin secventa:
    a) for(i=N-1; i>=K;i--)
    x[N-i+1]=x[N-i];
    x[i]=A;
    b) for(i=N; i>=K-1;)
    x[N-i+1]=x[N-i];
    x[i--]=A

    c) for(i=N; i>=K-1;i++)
    x[N-i+1]=x[N-i];
    x[i]=A

    d) for(i=0; i>K-1;i++)
    x[N-i+1]=x[N-i];
    x[i]=A

    e) for(i=N-1; i>=K-1;i--)
    x[i+1]=x[i];
    x[i]=A

  5. Pentru evaluarea expresiei B=A+E unde A, B sunt soua matrice patrate cu 5 linii si 5 coloane, iar E este matricea unitate cu 5 linii si 5coloane, se utilizeaza secventa:
    a) for(i=0; i<5; i++)
    for(j=0; j<5; j++)
    if(i==j) B[i][j] = A[i][j] +1;
    else
    B[i][j] = A[i][j] +0;
    b) de adunare obisnuita a doua matrice
    c) for(i=0; i<5; i++)
    if(i==j) B[i][i] = A[i][i] +1;
    else
    d) for(i=0; i<5; i++)
    for(j=0; j<5; j++)
    (i==j)? B[i][j] = A[i][j] +1:B[i][j] = A[i][j] +0;

    e) for(i=0; i<5; i++)
    for(j=0; j<5; j++)
    {
    B[i][j] = A[i][j] ;
    B[i][j] = B[i][j] +E[i][j];
    }


  6. Matricea unitate de ordin 5:

    a) se memoreaza prin:
    int a[3][3]= {1,2,3,4,5,6,7,8,9}
    b) se defineste si se initializeaza prin secventa
    int e[5][5]={
    1,0,0,0,0
    0,1,0,0,0,
    0,0,1,0,0,
    0,0,0,1,0,
    0,0,0,0,1
    };
    c) se genereaza la utilizare folosind fie o expresie conditionala, fie o instructiune if().... prin care se testeaza egalitatea variabilelor de control i si j
    d) se transforma in masiv unidimensional folosind directiva union si se lucreaza cu o singura structura repetitiva
    e) este refrita ca un bloc dintr-o matrice unitate de ordin N, unde N este o constanta simbolica mai mare ca 100 pentru a acoperi cat mai multe dintre dimensiunile matricelor din programele uzuale {
    struct lista_simpla * p_urmator;

  7. Matricea cu 6 linii si 7 coloane definita prin:
    1,2,-1,4,5,6,7
    1,2,-1,4,5,6,7
    1,2,-1,4,5,6,7
    1,2,-1,4,5,6,7
    1,2,-1,4,5,6,7
    1,2,-1,4,5,6,7
    a) se genereaza cu secventa:
    for(i=0; i<6; i++)
    {
    for(j=0; j<7;j++)
    a[i][j}=j;
    a[i][2]=-1;
    } ;
    b) se genereaza prin secventa:
    for(i=0; i<6; i++) {
    for(j=0;j<7;j++)
    if(j==2) a[i][j]=-1;
    else
    a[i][j]=j;
    c) struct slista {
    int iutil;
    struct slista *purmator;
    }x, * p_slista=x;
    d) se initializeaza de la tastatura ca orice alta matrice
    e) se construieste folosind proceduri mai general in care:
    - se initializeaza liniile cu termenii unei progresii aritmetice
    - se initializeaza o anumita coloana cu o constanta

  8. Initializarea unei matrice rare definita prin:
    int linie[20], coloana[20], valoare[20];
    se realizeaza:
    a) prin secventa:
    for(i=0;i printf("\n linie =");
    scanf("%d",&linia[i]);
    printf("\n coloana=");
    scanf("%d",&coloana[i]);
    print("\n valoare=");
    scanf("%d",&valoare[i]);
    }

    b) prin secventa:
    for(i=0;i scanf("%d", &n); // citeste numar elemente nenule
    printf("\n linie =");
    scanf("%d",&linia[i]);
    printf("\n coloana=");
    scanf("%d",&coloana[i]);
    print("\n valoare=");
    scanf("%d",&valoare[i]);
    }

    c) prin secventa:
    int i=0, vb=1; do
    {
    printf("\n linie =");
    scanf("%d",&linia[i]);
    printf("\n coloana=");
    scanf("%d",&coloana[i]);
    print("\n valoare=");
    scanf("%d",&valoare[i]);
    i++;
    if(linia[i]==-1|| coloana[i]==-1)vb=0;
    }
    while(vb==1);

    d) prin secventa:
    int i=0, vb=1; do
    {
    vb=0; printf("\n linie =");
    scanf("%d",&linia[i]);
    printf("\n coloana=");
    scanf("%d",&coloana[i]);
    print("\n valoare=");
    scanf("%d",&valoare[i]);
    i++;
    if(linia[i]==-1|| coloana[i]==-1)vb=1;
    }
    while(vb==1);

    e) prin secventa:
    int i=0, vb=1; ....................
    do
    {
    print("\n valoare=");
    scanf("%d",&valoare[i]);
    if(valoare[i]==0)break;
    printf("\n linie =");
    scanf("%d",&linia[i]);
    printf("\n coloana=");
    scanf("%d",&coloana[i]);
    i++;
    }
    while(i<20);

    .......................
  9. Matricea unitate se utilizeaza prin intermediul:
    a) procedurii: void unitate (int a[][N], int n)
    {
    int i,j;
    for(i=0; i for(j=0; j a[i][j]=0;
    for(i=0;i a[i][i]=1;
    }

    b) procedurii de initializare a matricei rare de la tastatura defineste o structura
    c) prin definirea ca variabila statica initializata la definire ca oricare alta matrice
    d) la definire astfel:
    int a[7][7]={1, , , , , , ,
    ,1, , , , , ,
    , ,1, , , , ,
    , , ,1, , , ,
    , , , ,1, , ,
    , , , , ,1, ,
    , , , , , ,1,}
    e) defineste o structura de date dinamica in care singurul element contine numai dimensiunea matricei si atat,

  10. Traversarea unui arbore binar se efectueaza:
    a) in preordine;
    b) in preordine sau "radacina-dreapta-radacina"
    c) de sus in jos
    d) de jos in sus
    e) de la stanga la dreapta

  11. Daca arborele binar are o radacina R un descendent stang A si un descendent drept B; nodul A are un descendent stang C si un descendent drept D; nodul B adre un descendent stang E si un descendent drept F; nodul D are un descendent stang XY si un descendent drept Y; nodul F are un descendent stang W1 si un descendent drept V, atunci:
    a) traversarea in preordine sau inseamna referirea nodurilor
    R A C D XY Y B E F W1 V
    b) traversarea in preordine sau inseamna referirea nodurilor
    R A C D XY Y B F E W1 V
    c) traversarea in preordine sau inseamna referirea nodurilor
    R A C E XY Y B E D W1 V

    d) traversarea in preordine sau inseamna referirea nodurilor
    R A C D B E R XY Y W1 V

    e) traversarea in preordine sau inseamna referirea nodurilor
    F B A D X Y Y C E R W V


  12. Pentru definirile si initializarile:
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int b[7]={21,22,23,24,25,26,28};
    int c[N];

    a) pentru a se efectua concatenarea masivelor a si b in c trebuie verificat daca 10 + 7 >< N
    b) masivul c[] trebuie definit cu 17 componente
    c) concatenarea se efectueaza prin copierile:
    int k=0,i; ...............
    for(i=0; i<10; i++) c[i]=a[i]; for(i=0; i<7; i++) c[i+7]=b[i];

    .................
    d) concatenarea se efectueaza prin copierile:
    int k=0,i; ...............
    for(i=0; i<10; i++) c[k]=a[i]; for(i=0; i<7; i++) c[k+7]=b[i];

    .................
    e) concatenarea se efectueaza prin copierile:
    int k=0,i; ...............
    for(i=0; i<10; i++) c[k++]=a[i]; for(i=0; i<7; i++) c[k++ +7]=b[i];

    .................


  13. Fiind date definirile si initializarile:
    int a[20]={1,2,3,4,5,6,7,8,9,10};
    int b[15]={1,2,3,4,5};
    a) concatenarea lui b[] cu a[] se efectueaza in a[] astfel:
    for(i=10; i<15; i++)
    a[i]=b[i+10];
    b) concatenarea nu se efectueaza pentru ca b[] are 15 componente, a[] are initializate 10 componente si 10+15=25, iar a[] are numai 20 de componente
    c) concatenarea lui b[] cu a[] se efectueaza in a[] astfel:
    for(i=10; i<15; i++)
    a[i]=b[10-i];
    d) concatenarea lui b[] cu a[] se efectueaza in a[] astfel:
    for(i=10; i<15; i++)
    a[i]=b[i-10];
    e) concatenarea lui a[] cu b[] se efectueaza in a[] astfel:
    for(i=10; i<15; i++)
    b[i]=b[i+6];


  14. Linearizarea unui masiv bidimensional se realizeaza:
    a) linie dupa linie de unde vine si numele de linearizare
    b) coloana dupa linie
    c) linie dupa coloana
    d) folosind o functie cu lista vida de parametri
    e) coloana dupa coloana operatia fiind denumita colinearizare


  15. Fiind dat masivul bidimensionala[][] definit prin:
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    si masivul unidimensional b[] definit prin:
    int b[100];
    a) linearizarea masivului a[][] se efectueaza prin secventa:
    for(i=0;i for(j=0;j b[k]=a[i][j];
    b) linearizarea masivului a[][] se efectueaza prin secventa:
    k=0;
    n=3;
    m=4;
    ..................
    for(i=0;i for(j=0;j b[k]=a[i][j];
    c) linearizarea masivului a[][] se efectueaza prin secventa:
    for(i=0;i for(j=0;j b[k++]=a[i][j];
    d) linearizarea masivului a[][] se efectueaza prin secventa:
    k=0;
    n=3;
    m=4;
    ..................
    for(i=0;i for(j=0;j b[k++]=a[i][j];
    e) linearizarea masivului a[][] se efectueaza prin secventa:
    k=12;
    n=3;
    m=4;
    ..................
    for(i=0;i for(j=0;j b[k--]=a[i][j];


  16. initializarea cu valorile 1,2,3,4,5,6,7,8,9,10 a unui masiv bidimensional se realizeaza: a) la definire prin secventa:
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    b) in cadrul unei structuri repetitive de forma:
    for(i=0; i<10; i++) a[i]=i;
    c) de la tastatura,prin secventa:
    for(i=0; i<10; i++)
    {
    printf("introduceti elementul a[",%d,"]=",i+1);
    scanf("%d",&a[i]);
    }
    d) prin atribuirile:
    a[0]=1;
    a[1]=2;
    a[2]=3;
    a[3]=4;
    a[4]=5;
    a[5]=6;
    a[6]=7;
    a[7]=8;
    a[8]=9;
    a[9]=10;

    e) prin apelarea unei proceduri care genereaza cate un termen al unei progresii aritmetice dandu-i-se primul termen, ratia si pozitia termenului care se genereaza, in secventa:
    .................
    int a[10],i,ratia=1, nr_termeni=10, prim_termen=1;
    ..................
    for(pozitia_termen=0;pozitia_termen ..................
    int generare(int a0, int r, int k)
    {
    int ak;
    ak=a0+(k-1)*r;
    return ak;
    }


  17. Matricea rara:
    0,0,0,0,0,0,0,0,0
    1,0,0,0,0,3,0,0,0
    1,0,0,0,5,0,0,0,0
    0,0,0,0,0,9,0,0,0
    0,0,0,0,0,0,0,0,0
    a) se memoreaza ca o matrice rara
    b) se memoreaza dintr-o matrice asimetrica stocata intr-un fisier
    c) se memoreaza ca vectorZZ de structura cu trei membri cu 4 componente si se refera printr-o expresie de forma ZZ[i].AA sau de forma
    ZZ[i].BB sau de forma ZZ[i].YY;
    fiecare componenta are trei campuri, unul AA pentru linie, altul BB pentru coloana si al treilea YY pentru valoarea nenula a matricei
    d)se initializeaza de la tastarura unele elemente si dintr-un fisier altele
    e) se initializeaza la definire prin secventa:
    int linia[]={1,1,2,2,3};
    int coloana[]={0,5,0,4,5};
    int valoare[]={1,3,1,5,9};


  18. Lucru cu masive unidimensionale mereu se realizeaza mai intai prin:
    a) definirea cu initializare la definire ca in secventa:
    int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
    b) definirea cu initializare la definire ca in secventa:
    int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
    c) definirea cu initializare la definire ca in secventa:
    int a[13]={1,2,3,4,5,6,7,8,9,10,11};
    d) definirea cu initializare la definire ca in secventa:
    int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    e) alocare dinamica si prin initializare de la tastatura ca in secventa:
    int *p; // definire pointer spre intreg
    int n; // numar de componente
    int errr; // daca exista erori errr!=0 altfel errr=0
    ....................
    printf("\n introduceti numar de componente:");
    scanf("%d", &n);
    ........................
    if(n>0)
    p=(int*)malloc(sizeorf(int)*n);
    else
    errr=1;
    if(errr==0 && p!=NULL) for(i=0 ; i < n; i++)
    {
    printf("introduceti p[",%d,"]=", i);
    scanf("%d",&p[i]);
    }
    else
    errr++;
    ...............


  19. Compararea a doua liste simple inseamna:
    a) comparea continutului informatiei utile din cele doua liste simple
    b) comparea lungimilor ca numar de elemente din cele doua liste simple
    c) traversarea structurilor de la primul spre ultimul element
    d) apelarea procedurii:
    int comparare_LS(struct lista_simpla *pcpls1, struct lista_simpla *pcpls2)
    {
    struct lista_simpla *paux1, *paux2;
    int vb=1, lungime_list1, lungime_list2;
    paux1=cpls1;
    paux2=cpls2;
    lungime_list1=sizeof_lista_simpla(paux1);
    lungime_list2=sizeof_lista_simpla(paux2);
    if(lungime_list1!=lungime_list2) return (vb=0);
    while(paux1 && paux2){
    if(paux1->info != paux2->info) return (vb=0);
    paux1=paux1->p_urmator;
    paux2=paux2->p_urmator;
    }
    return (vb); }

    unde sizeof_lista_simpla() este o functie care intoarce numarul de elemente din lista simpla
    e) apelarea unei proceduri care are doi parametri, cei doi pinteri ce refera, respectiv, primul element fiecarei liste simple; procedura returneaza o variabila booleana

  20. Interschimbul elementelor x[i][0] si x[j[0]] ale masivului bidimensional
    definit prin:
    int x[100[10];
    se realizeaza :
    a) direct intre cele doua elemente
    b) folosind doua variabile de lucru definite prin instructiunea
    int a,b;
    ...............
    a=x[i][0];
    b=x[j][0]:
    x[i][0]=b;
    x[i][0]=a;
    ...........

    c) folosind o singura variabila elementara, obligatoriu definita statica temp, prin secventa:
    temp=x[i][0];
    x[j][0]=x[i][0];
    x[i][0]=temp;

    d) folosind o singura variabila elementara, obligatoriu denumita temp definita prin
    int temp;
    utilizata prin secventa:
    temp=x[i][0];
    x[i][0]=x[0][j];
    x[0][j]=temp;

    e)folosind o singura variabila elementara, denumita temp, prin secventa:
    temp=x[i][0];
    x[j][0]=x[i][0];
    x[i][0]=temp;



  21. Variabila ptr definita prin:
    int **ptr;
    a) este o variabila elementara
    b) este un pointer dublu
    c) este pointer care memoreaza adrea unei zone de memorie de tip intreg sau pointer spre pointer spre intreg
    d) este un pointer spre pointer
    e) se refera prin expresia &&ptr