Corso di Informatica Generale - Primo modulo IN1

Testi e soluzioni di esercizi

 

Terne consecutive

/*
**  terne.c
**
**  Genera in modo casuale una matrice di numeri interi minori di 10.
**  Stampa le colonne che contengono tre elementi consecutivi che
**  abbiano valori successivi.
**
**  Marco Liverani (liverani@mat.uniroma3.it) - Marzo 2001
*/

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

#define MAX 100

/*
 *  Generazione casuale di una matrice
 */

void genera_matrice(int x[MAX][MAX], int n, int m) {
  int i, j;

  srand((unsigned)time(NULL));
  for (i=0; i<n; i++)
    for (j=0; j<m; j++)
      x[i][j] = rand()%10;
  return;
}


/*
 * Verifica la proprieta' sulla colonna di indice 'c' della matrice.
 * Restituisce 1 se la proprieta' e' verificata, 0 altrimenti.
 */

int verifica(int x[MAX][MAX], int c, int n) {
  int i, r=0;

  for (i=0; i<=n-3 && r==0; i++) {
    if (x[i][c] == x[i+1][c]-1 && x[i+1][c] == x[i+2][c]-1)
      r = 1;
  }
  return(r);
}


/*
 *  funzione per la stampa della colonna di indice 'c' della matrice.
 */

void stampa_colonna(int x[MAX][MAX], int c, int n) {
  int i;

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


/*
 *  Funzione per la stampa della matrice.
 */

void stampa_matrice(int x[MAX][MAX], int n, int m) {
  int i, j;

  for (i=0; i<n; i++) {
    for (j=0; j<m; j++)
      printf("%4d ", x[i][j]);
    printf("\n");
  }
  return;
}


/*
 *  funzione principale (main)
 */

int main(void) {
  int i, n, m, mat[MAX][MAX];

  printf("Numero di righe e di colonne: ");
  scanf("%d %d", &n, &m);
  genera_matrice(mat, n, m);
  stampa_matrice(mat, n, m);
  for (i=0; i<m; i++) {
    if (verifica(mat, i, n))
      stampa_colonna(mat, i, n);
  }
  return(1);
}

Per informazioni e commenti: liverani@mat.uniroma3.it - Torna alla Home page - Ultima modifica: 18 Marzo 2001