Skip to content

Instantly share code, notes, and snippets.

@mariusmg2
Last active August 29, 2015 13:57
Show Gist options
  • Save mariusmg2/9365462 to your computer and use it in GitHub Desktop.
Save mariusmg2/9365462 to your computer and use it in GitHub Desktop.
Teme AC->TP.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int n, j = 0, i;
printf("\nValoarea lui n: "); scanf("%d", &n);
int *data = malloc(n * sizeof(*data));
int *data_aux = malloc(n * 2 * sizeof(*data));
for(i = 0; i < n; i++) {
printf("data[%d]= ", i); scanf("%d", (data + i));
}
for(i = 0; i < n; i++) {
data_aux[j++] = data[i];
*(data_aux + j++) = (*(data + i) % 2 == 0) ? 1 : 0;
}
n = j;
free(data);
printf("\nNoul array: ");
for(i = 0; i < n; i++) {
printf("%d ", data_aux[i]);
}
free(data_aux);
printf("\n\n");
/**
* Problema 2.
*
*/
n = i = 0;
data = NULL;
data_aux = NULL;
printf("\nIntroduceti un sir de numere terminat cu CTRL+D/CTRL+Z.\n");
while(scanf("%d", &n) != EOF) {
i++;
data_aux = realloc(data, i * sizeof(int));
data = data_aux;
data[i - 1] = n;
}
n = i;
printf("\nNumerele introduse: ");
for(i = 0; i < n; i++) {
printf("%d ", data[i]);
}
// Eliminarea valorilor pare.
for(i = 0; i < n; i++) {
if(data[i] % 2 == 0) {
for(j = i; j < n; j++) {
data[j] = data[j + 1];
}
n--;
i--;
}
}
printf("\nFara numerele pare: ");
for(i = 0; i < n; i++) {
printf("%d ", data[i]);
}
free(data);
free(data_aux);
printf("\n\n");
return 0;
}
/**
* Se da o matrice patratica de dim. N (N <= 10).
* - Sa se verifice daca matricea este simetrica fata de diag. principala.
* - Sa se calculeze suma elementelor de pe diagonala principala.
*/
#include <stdio.h>
#include <stdlib.h>
int readMatrix(int*, int, int);
int printMatrix(int*, int, int);
int isSimetric(int*, int);
int sumPrincDiag(int*, int);
int main(int argc, char **argv) {
int dim;
printf("\nIntroduceti dimensiunea matricii (n x n): "); scanf("%d", &dim);
printf("Introduceti matricea: \n");
int *matr = malloc(dim * dim * sizeof(int *));
readMatrix(matr, dim, dim); printf("\nMatricea citita este: \n\n");
printMatrix(matr, dim, dim);
printf("\nMatricea%s este simetrica!", isSimetric(matr, dim) ? "" : " nu");
printf("\nSuma elementelor de pe diag. principala este: %d", sumPrincDiag(matr, dim));
free(matr);
printf("\n\n");
return 0;
}
int readMatrix(int *data, int rows, int columns) {
int i, j;
for(i = 0; i < rows; i++) {
for(j = 0; j < columns; j++) {
printf("matr[%d][%d] = ", i, j); scanf("%d", data + (i * columns + j));
}
}
return 0;
}
int printMatrix(int *data, int rows, int columns) {
int i, j;
for(i = 0; i < rows; i++) {
for(j = 0; j < columns; j++) {
printf("%d ", *(data + (i * columns + j)));
}
printf("\n");
}
return 0;
}
int isSimetric(int *data, int size) {
int i, j;
for(i = 0; i < size; i++) {
for(j = 0; j < size; j++) {
if(*(data + (i * size + j)) != *(data + (j * size + i))) {
return 0;
}
}
}
return 1;
}
int sumPrincDiag(int *data, int size) {
int i, sum = 0;
for(i = 0; i < size; i++) {
sum += *(data + (i * size + i));
}
return sum;
}
/**
* Se da o matrice cu M linii si N coloane.
* - Sa se construiasca inca o coloana in matrice care sa contina suma elementelor de pe fiecare linie.
* - Sa se det. elem. max. de pe fiecare coloana, sa se memoreze valorile intr-un vect, apoi sa se afiseze.
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int readMatrix(int*[], int, int);
int sumArray(int*, int);
int printMatrix(int*[], int, int);
int main(int argc, char **argv) {
int rows, columns, i, j;
printf("\nCate linii are matricea? "); scanf("%d", &rows);
printf("Cate coloane are matricea? "); scanf("%d", &columns);
int **matrix = malloc(rows * sizeof(int*));
for(i = 0; i < rows; i++) {
matrix[i] = malloc(columns * sizeof(int) + sizeof(int)); // +1 for the sum column.
}
readMatrix(matrix, rows, columns);
printf("\nMatricea tocmai introdusa este: \n\n");
printMatrix(matrix, rows, columns);
// Cerinta I:
for(i = 0; i < rows; i++) {
matrix[i][columns] = sumArray(matrix[i], columns);
}
printf("\nCu suma elementelor de pe fiecare linie pusa pe coloane: \n\n");
printMatrix(matrix, rows, columns + 1);
// Cerinta II:
int max = INT_MIN, u = 0;
int *maxColumns = malloc(columns * sizeof(int));
for(i = 0; i < columns; i++) {
for(j = 0; j < rows; j++) {
if(matrix[j][i] > max) {
max = matrix[j][i];
}
}
maxColumns[u++] = max;
max = INT_MIN;
}
printf("\nElementele maxime de pe fiecare coloana a matricii anterioare sunt: ");
for(i = 0; i < u; i++) {
printf("%d ", maxColumns[i]);
}
printf("\n\n");
for(i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
free(maxColumns);
return 0;
}
int readMatrix(int *data[], int rows, int columns) {
int i, j;
for(i = 0; i < rows; i++) {
for(j = 0; j < columns; j++) {
printf("matr[%d][%d] = ", i, j); scanf("%d", *(data + i) + j);
}
}
return 0;
}
int sumArray(int *data, int size) {
int i, sum = 0;
for(i = 0; i < size; i++) {
sum += *(data + i);
}
return sum;
}
int printMatrix(int *data[], int rows, int columns) {
int i, j;
for(i = 0; i < rows; i++) {
for(j = 0; j < columns; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment