Saturday, January 9, 2016

21) Transformarea unei matrice triunghiulara inferior intr-una triunghiulara superior

//o matrice este triunghiular inferioara daca toate elementele de sub diagonala principala sunt egale cu 0

  


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

int k;

int triunghiulara(int a[20][20], int n, int m) {
    int i,j, tri=0;
    k=1;
    for(i=0;i<n;i++) {
        for(j=i+1;j<m;j++) {
            if(a[i][j]!=0) {
                k=0;
            }
        }
    }

    if(k!=0){
        tri=1;}
    return tri;
}

void triunghiularaSuperior(int a[20][20], int n, int m) {
    int i,j;
    for(i=1;i<n;i++) {
        for(j=0;j<i;j++) {
            a[i][j] = 0;
        }
    }

}

int main() {
    int a[20][20];
    int i,j,n,m, tri=0;
    printf("Linii: "); scanf("%d", &n);
    printf("Coloane: "); scanf("%d", &m);
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            printf("a[%d][%d] = ",i,j); scanf("%d", &a[i][j]);
        }
    }
    puts("Afisare matrice... \n");
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            printf(" %d ", a[i][j]);
        }
        puts(" ");
    }
    puts(" ");
    tri = triunghiulara(a,n,m);


    if(tri==1) {
        puts("Matricea este triunghiulara inferior \n -----> Transformare in matrice triunghiulara superior... \n");
        triunghiularaSuperior(a, n, m);
        puts("Afisare matrice triunghiulara superior & inferior \n");

        for(i=0;i<n;i++) {
            for(j=0;j<m;j++) {
                printf(" %d ", a[i][j]);
            }
            puts(" ");
        }

    }

}







20) Verificarea daca o matrice este triunghiular inferioara

//o matrice este triunghiular inferioara daca toate elementele de deasupra diagonalei principale sunt egale cu 0

  

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

int k;

int triunghiulara(int a[20][20], int n, int m) {
    int i,j, tri=0;
    k=1;
    for(i=0;i<n;i++) {
        for(j=i+1;j<m;j++) {
            if(a[i][j]!=0) {
                k=0;
            }
        }

    }

    if(k!=0){
        tri=1;
    }
    return tri;

}

int main() {
    int a[20][20];
    int i,j,n,m, tri=0;
    printf("Linii: "); scanf("%d", &n);
    printf("Coloane: "); scanf("%d", &m);
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            printf("a[%d][%d] = ",i,j); scanf("%d", &a[i][j]);
        }
    }
    puts("Afisare matrice... \n");
    for(i=0;i<n;i++) {
        for(j=0;j<m;j++) {
            printf(" %d ", a[i][j]);
        }
        puts(" ");
    }
    puts(" ");
    tri = triunghiulara(a,n,m);


    if(tri==1) {
        printf("Matricea este triunghiulara inferior. \n");
    }





}







Friday, January 8, 2016

19) Determinarea transpusei unei matrice

Sa se scrie programul care afiseaza transpusa unei matrice. Elementele matricei vor fi citite de la tastatura.

  

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


int main() {
    int a[20][20],b[20][20];
    int i,j,n;
    printf("m=n= "); scanf("%d", &n);
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            printf("a[%d][%d] = ",i,j); scanf("%d", &a[i][j]);
        }
    }

    puts("Afisare matrice initiala...");
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
          printf(" %d ", a[i][j]);
        } puts(" ");
    }
    puts("Afisare transpusa matricei...");
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
           b[i][j] = a[j][i];
        }
    }

    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            printf(" %d ", b[i][j]);
        } puts(" ");
    }


}








Thursday, January 7, 2016

18) Determinarea produsului scalar a doi vectori (subprogram)

Sa se scrie programul care afiseaza produsul scalar a doi vectori folosind un subprogram. Elementele vectorilor vor fi citite de la tastatura.

  

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

void scalar(float a[20], float b[20], float *produs, int size) {
    int i;
    *produs=0;
    for(i=0;i<size;i++) {
        *produs += a[i]*b[i];
    }
}

int main() {
    float a[20], b[20], produs;
    int i, size;
    printf("Dimensiunea vectorilor: "); scanf("%d", &size);
    for(i=0;i<size;i++) {
        printf("a[%d] = ", i); scanf("%f", &a[i]);
         printf("b[%d] = ", i); scanf("%f", &b[i]);
    }
    scalar(a,b, &produs, size);
    printf("prod scalar: %f", produs);

}







17) Determinarea elementului maxim dintr-un vector + aparitiile sale (subprogram)

Sa se scrie programul care afiseaza elementul maxim dintr-un vector precum si pozitiile pe care apare acesta. Vectorul va fi alocat dinamic iar elementele acestuia se vor citi de la tastatura.

  

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

void maxim(float *v, float *max, float *aparitii_maxim, int dim) {
    int i, k=0;
    *max = -99999;
    for(i=0;i<dim;i++) {
        if(v[i]>*max) {
            *max = v[i];
            k=1;
            aparitii_maxim[0] = i;
        }
        else if (v[i]==*max) {
            aparitii_maxim[k++] = i;
        }
    }

    printf("Elementul maxim este: %6.1f \n", *max);

    if(k>0) {
        for(i=0;i<k;i++) {
           printf("Maximul apare pe pozitiie: %6.0f \n", aparitii_maxim[i]);
        }
   }

}


int main() {
    float *v, element_maxim, aparitii[20];
    int i, dim;
    printf("Dimensiune vector: "); scanf("%d", &dim);
    v = (float*)malloc(dim*sizeof(float));
    for(i=0;i<dim;i++) {
        printf("v[%d] = ", i); scanf("%f", &v[i]);
    }

    maxim(v, &element_maxim, aparitii, dim);


}







16) Inmultirea unui a doua matrice (subprogram+alocare dinamica)

Sa se scrie programul care afiseaza rezultatul inmultirii unei matrice A cu o matrice B folosind un subprogram. Elementele ambelor matrice se vor citi de la tastatura.

  

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


float **produsF(float a[20][20], float b[20][20], int n, int k) {
    float **produs;
    int i,j,x;
    produs = (float**) malloc(n*sizeof(float));
    for(i=0;i<k;i++) {
        produs[i] = (float**) malloc(k*sizeof(float));
    }

    for(i=0;i<n;i++) {
        for(j=0;j<k;j++) {
            produs[i][j]=0;
            for(x=0;x<n;x++) {
                produs[i][j] += a[i][x]*b[x][j];
            }
        }
    }
    return produs;
}


int main() {
    float a[20][20], b[20][20], **c;
    int i,j,n,size,k;
    printf("Linii A: "); scanf("%d", &n);
    printf("Coloane A = Linii B: "); scanf("%d", &size);
    printf("Coloane B: "); scanf("%d", &k);

    for(i=0;i<n;i++) {
        for(j=0;j<size;j++) {
            printf("a[%d][%d] = ", i, j); scanf("%f", &a[i][j]);
        }
    }

    for(i=0;i<size;i++) {
        for(j=0;j<k;j++) {
            printf("b[%d][%d] = ", i, j); scanf("%f", &b[i][j]);
        }
    }

    c = produsF(a, b, n, k);
    puts("Matrice rezultat: ");
    for(i=0;i<n;i++) {
        for(j=0;j<size;j++) {
            printf(" %f ", c[i][j]);
        }
        puts(" ");
    }



}






15) Inmultirea a doua matrice (subprogram)

Sa se scrie programul care afiseaza rezultatul inmultirii unei matrice A cu o matrice B folosind un subprogram. Elementele ambelor matrice se vor citi de la tastatura.

  

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

void produs(int a[20][20], int b[20][20], int c[20][20], int n, int k) {
    int i,j,x;
    for(i=0;i<n;i++) {
        for(j=0;j<k;j++) {
            c[i][j] = 0;
            for(x=0;x<n;x++) {
                c[i][j] += a[i][x]*b[x][j];
            }
        }
    }

}


int main() {
    int a[20][20], b[20][20], c[20][20]; //c = matrice output
    int i,j,n,k,size;
    printf("Linii A: "); scanf("%d", &n);
    printf("Coloane A = Linii B: "); scanf("%d", &size);
    printf("Columns B: "); scanf("%d", &k);

    for(i=0;i<n;i++) {
        for(j=0;j<size;j++) {
            printf("a[%d][%d] = ", i,j); scanf("%d", &a[i][j]);
        }
    }

    for(i=0;i<size;i++) {
        for(j=0;j<k;j++) {
            printf("b[%d][%d] = ", i,j); scanf("%d", &b[i][j]);
        }
    }

    produs(a,b,c,n,k);

    for(i=0;i<n;i++) {
        for(j=0;j<size;j++) {
            printf(" %d ", c[i][j]);
        }
        printf("\n");
    }

}