Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <stdlib.h>
- int ** Alocare(int linii, int coloane) { // Alocare spatiu pt dublu pointer
- int **pointer;
- if ((pointer = (int **)malloc(sizeof(int *)*linii)) == NULL) {
- printf("Nu s-a gasit memorie.");
- _getch();
- exit(0);
- }
- for (int i = 0; i <linii; i++)
- if ((pointer[i] = (int *)malloc(sizeof(int)*coloane)) == NULL) {
- printf("nu s-a gasit memorie.");
- _getch();
- exit(0);
- }
- return pointer;
- }
- int *AlocareSimplu(int linii) { // Alocare spatiu pt pointer simplu
- int *p;
- if ((p = (int *)malloc(sizeof(int)*linii)) == NULL) {
- printf("Nu s-a gasit memorie.");
- _getch();
- exit(0);
- }
- return p;
- }
- int ** AlocareSpeciala(int *p, int linii, int coloane) { // Alocare spatiu pentru matricea care elimin pe toti 'zero'
- int **G;
- if ((G = (int **)malloc(sizeof(int *)*linii)) == NULL) {
- printf("Nu s-a gasit memorie.");
- _getch();
- exit(0);
- }
- for (int i = 0; i < linii; i++){
- if ((G[i] = (int *)malloc(sizeof(int)*(coloane - (*p)))) == NULL) { // coloane - (*p) inseamna ca nr de coloane e diferit la fiecare linie
- printf("Nu s-a gasit memorie");
- _getch();
- exit(0);
- }
- p++;
- }
- return G;
- }
- void CitireMatrice(int linii, int coloane, int **pointer) {
- for (int i = 0; i < linii; i++) {
- for (int j = 0; j < coloane; j++) {
- printf("matrice[%d][%d]= ", i, j);
- scanf_s("%d", &pointer[i][j]);
- }
- }
- }
- void AfisareMatrice(int linii, int coloane, int **pointer) {
- for (int i = 0; i < linii; i++) {
- for (int j = 0; j < coloane; j++) {
- printf("%d ", pointer[i][j]);
- }
- printf("\n");
- }
- }
- void NumaraZero(int linii, int coloane, int **pointer, int *p) { // aici stochez in p valori (fiecare pozitie din vector (p) contine o valoare iar acea valoare este nr de zero-uri care se afla pe fiecare linie)
- int s;
- // p = AlocareSimplu(lung);
- for (int i = 0; i < linii; i++) {
- s = 0;
- for (int j = 0; j < coloane; j++)
- if (pointer[i][j] == 0)
- s++;
- *p = s;
- p++;
- }
- }
- void MatFaraZero(int linii, int coloane, int **a, int **b, int *p) {
- int x = 0, y = 0; // p= {2,3,0}
- int *init_p;
- init_p = p;
- for (int i = 0; i < linii; i++) {
- for (int j = 0; j < coloane; j++)
- if (a[i][j] != 0) {
- b[x][y] = a[i][j]; // Stocare elemente nenule din prima matrice in a 2 matrice formand o matrice inegala
- y++;
- }
- y = 0; // reinitializare coloane matrice b
- x++;
- p++;
- }
- p = init_p;
- printf("\nAfisare matrice fara zero:\n");
- for (int i = 0; i < linii; i++) {
- for (int j = 0; j < (coloane - *p); j++) // nr de coloane e diferit mereu in functie de cat e *p la acea pozitie
- printf("%d ", b[i][j]);
- p++;
- printf("\n");
- }
- }
- void main() {
- int **a, **rezultat, n, m, *p;
- printf("Liniile matrici: ");
- scanf_s("%d", &n);
- while (n < 0 || n == 0) {
- printf("Introduceti valori din N pentru liniile matricii: ");
- scanf_s("%d", &n);
- }
- printf("Coloanele matrici: ");
- scanf_s("%d", &m);
- while (m < 0 || m == 0) {
- printf("Introduceti valori din N pentru coloanele matricii: ");
- scanf_s("%d", &m);
- }
- a = Alocare(n, m);
- CitireMatrice(n, m, a);
- printf("\nAfisare matrice:\n");
- AfisareMatrice(n, m, a);
- p = AlocareSimplu(n);
- printf("\n");
- NumaraZero(n, m, a, p);
- rezultat = AlocareSpeciala(p, n, m);
- MatFaraZero(n, m, a, rezultat, p);
- _getch();
- }
- // 0 0 1 0 0 0 4 5 6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement