Corso di Informatica Generale - Primo modulo IN1

Testi e soluzioni di esercizi

 

Inserimento nella sequenza ordinata

/*
**  inserimento.c
**
**  Leggere in input una sequenza di n numeri interi e memorizzarla
**  in un array A. Si supponga che la sequenza letta in input sia
**  gia' ordinata in ordine crescente. Generare in modo casuale una
**  seconda sequenza di m numeri interi ed inserire gli elementi
**  generati nella posizione corretta nell'array A in modo che A
**  continui ad essere ordinato, eventualmente spostando in avanti
**  gli elementi gia' presenti per fare posto ai nuovi elementi da
**  inserire. Stampare in output l'array A.
**
**  Marco Liverani (liverani@mat.uniroma3.it) - Aprile 2001
*/

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

#define MAX 100

/*
 *  Legge in input un vettore di interi. Restituisce il numero di
 *  elementi letti.
 */

int leggi_array(int V[]) {
  int i, n;

  printf("Numero di elementi: ");
  scanf("%d", &n);
  for (i=0; i<n; i++)
    scanf("%d", &V[i]);
  return(n);
}

/*
 *  Genera in modo casuale un vettore di interi. Restituisce il numero
 *  di elementi prodotti.
 */

int genera_array(int V[]) {
  int i, n;

  printf("Numero di elementi: ");
  scanf("%d", &n);
  srand((unsigned)time(NULL));
  for (i=0; i<n; i++)
    V[i] = rand() % 100;
  return(n);
}

/*
 *  Stampa un array di n elementi.
 */

void stampa_array(int V[], int n) {
  int i;

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

/*
 *  Inserisce gli elementi di B in A rispettando l'ordinamento
 *  crescente.
 */

void inserisci(int A[], int n, int B[], int m) {
  int i, j;

  for (j=0; j<m; j++) {
    i = n+j-1;
    while (i>=0 && A[i]>B[j]) {
      A[i+1] = A[i];
      i--;
    }
    A[i+1] = B[j];
  }
  return;
}

/*
 *  Funzione principale.
 */

int main(void) {
  int i, n, m, x, A[MAX], B[MAX];
  n = leggi_array(A);
  m = genera_array(B);
  printf("La sequenza generata in modo casuale e':\n");
  stampa_array(B, m);
  inserisci(A, n, B, m);
  stampa_array(A, n+m);
  return(1);
}

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