Informatică, întrebare adresată de Magwaer, 8 ani în urmă

A scrie un program C care conține funcțiile ce urmează. Toate funcțiile vor fi ulterior apelate în funcția main.




1). Citește de la tastieră o matrice de numere întregi cu dimensiunea de M × N.


2). Afișează matricea introdusă.


3). Găsește toate elementele de pe rândurile matriciei care sunt numere impare și le stochează într-un array unidimensional.



4). Afișează într-un array unidimensional toate valorile, dar și indecșii elementelor impare găsite conform condiției date.


Magwaer: sa fie anume in C, nu in C ++

Răspunsuri la întrebare

Răspuns de alexmis1311
1

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int* citesteMatrice()

{

int m, n;

printf("Dati m si n: ");

scanf("%d %d", &m, &n);

int* arr = (int*)malloc((m * n + 2) * sizeof(int));

int* temp = (int*)malloc(m * n * sizeof(int));

printf("\nDati elementele matricii: ");

for (int i = 0; i < m; i++)

{

 for (int j = 0; j < n; j++)

 {

  int nr;

  scanf("%d", &nr);

  *(temp + i * n + j) = nr;

 }

}

arr[0] = m;

arr[1] = n;

memcpy(arr + 2, temp, m * n * sizeof(int));

return arr;

free(arr);

free(temp);

}

void afisareMatrice(int* arr, int m, int n)

{

printf("\nMatricea introdusa este:\n");

for (int i = 0; i < m; i++)

{

 for (int j = 0; j < n; j++)

 {

  printf("%d ", *(arr + i * n + j));

 }

 printf("\n");

}

}

int* gasesteElem(int* arr, int m, int n)

{

int nrElem = 0;

int* elem = (int*)malloc((m * n * 3 + 1) * sizeof(int));

for (int i = 0; i < m; i++)

{

 for (int j = 0; j < n; j++)

 {

  int nr = *(arr + i * n + j);

  if (nr % 2 != 0)

  {

   elem[nrElem * 3 + 1] = nr;

   elem[nrElem * 3 + 2] = i;

   elem[nrElem * 3 + 3] = j;

   nrElem++;

  }

 }

}

elem[0] = nrElem;

return elem;

free(elem);

}

void afisareElem(int* arr)

{

int nrElem = arr[0];

printf("\nElementele impare sunt:\n");

for (int i = 0; i < nrElem; i++)

{

 printf("%d(%d, %d)\n", arr[i * 3 + 1], arr[i * 3 + 2], arr[i * 3 + 3]);

}

}

int main()

{

int m, n;

int* elem;

int* temp;

temp = citesteMatrice();

m = temp[0];

n = temp[1];

int* arr = (int*)malloc(m * n * sizeof(int));

memcpy(arr, temp + 2, n * m * sizeof(int));

free(temp);

afisareMatrice(arr, m, n);

elem = gasesteElem(arr, m, n);

afisareElem(elem);

free(arr);

free(elem);

return 0;

}

Anexe:
Alte întrebări interesante