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.
Răspunsuri la întrebare
#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;
}