Guest User

Untitled

a guest
Nov 15th, 2014
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <time.h>
  5. #define ERR -1
  6.  
  7. // Prototipi delle funzioni
  8. int* cerca(int *vect, int n, int valore);
  9. int* cerca_vettore_ordinato(int *vect, int n, int valore);
  10.  
  11. int main()
  12.  
  13. {
  14.     int *vect, *ptr, *vect1, *ptr1;
  15.     int n, i, cercato;
  16.  
  17.    srand((unsigned) time(NULL));
  18.  
  19.     // Chiedo all'utente quanti elementi vuole inserire nell'array
  20.     printf("Inserisci il numero di elementi del vettore: ");
  21.     scanf("%d", &n);
  22.     while (n <= 0 || n > INT_MAX) {
  23.         printf("Errore, devi inserire un numero positivo valido: ");
  24.         scanf("%d", &n);
  25.         while (getchar() != '\n');
  26.     }
  27.  
  28.     // Alloco dinamicamente un array di interi composto da n elementi e controllo la corretta allocazione
  29.     vect = (int*) malloc(n * sizeof(int));
  30.     if (vect == NULL) {
  31.         printf("Errore durante l'allocazione dinamica della memoria");
  32.         return 1;
  33.     }
  34.  
  35.     printf("\n\t\t ---- VETTORE NON ORDINATO ----\n\n");
  36.     // Riempio il vettore con numeri casuali da 0 a 100
  37.     for (i = 0; i < n; i++) {
  38.         *(vect + i) = rand() % 100;
  39.     }
  40.  
  41.     // Richiedo all'utente il numero da cercare ed eseguo un controllo per verificare che il numero inserito sia valido
  42.     printf("\nInserisci un numero da cercare: ");
  43.     scanf("%d", &cercato);
  44.     while (n <= 0 || n > INT_MAX) {
  45.         printf("Errore, devi inserire un numero positivo valido: ");
  46.         scanf("%d", &cercato);
  47.         while (getchar() != '\n');
  48.     }
  49.  
  50.     ptr = cerca(vect, n, cercato);
  51.  
  52.     if (ptr[0] != -1) {
  53.         for (i = 0; i < n && ptr[i] != ERR; i++)
  54.             printf("\nCorrispondenza in posizione: %d", ptr[i]+1); //Inizio a contare le posizioni da 1
  55.     } else
  56.         printf("\nIl valore cercato non e\' stato trovato (codice errore: %d)",ptr[0]);
  57.  
  58.     // Stampo il risultato
  59.     printf("\n\nComposizione del vettore: ");
  60.     for (i = 0; i < n; i++)
  61.         printf("%d ", vect[i]);
  62.     printf("\n\n\n");
  63.  
  64.     // Seconda parte programma
  65.     printf("\t      VETTORE ORDINATO IN MODO CRESCENTE\n\n");
  66.     // Alloco dinamicamente un array di interi composto da n elementi e controllo la corretta allocazione
  67.     vect1 = (int*) malloc(n * sizeof(int));
  68.     if (vect1 == NULL) {
  69.         printf("Errore durante l'allocazione dinamica della memoria");
  70.         return 1;
  71.     }
  72.  
  73.     // Riempio il vettore con numeri casuali da 0 a 100
  74.     for (i = 0; i < n; i++) {
  75.         *(vect1 + i) = (rand() % 10) + (i * 10);
  76.     }
  77.  
  78.     // Richiedo all'utente il numero da cercare ed eseguo un controllo per verificare che il numero inserito sia valido
  79.     printf("Inserisci un numero da cercare: ");
  80.     scanf("%d", &cercato);
  81.     while (n <= 0 || n > INT_MAX) {
  82.         printf("Errore, devi inserire un numero positivo valido: ");
  83.         scanf("%d", &cercato);
  84.         while (getchar() != '\n');
  85.     }
  86.  
  87.     ptr1 = cerca_vettore_ordinato(vect1, n, cercato);
  88.  
  89.     if (ptr1[0] != -1) {
  90.         for (i = 0; i < n && ptr1[i] != ERR; i++)
  91.             printf("\nCorrispondenza in posizione: %d", ptr1[i]+1); //Inizio a contare le posizioni da 1
  92.     } else
  93.         printf("\nIl valore cercato non e\' stato trovato (codice errore: %d)\n\n",ptr1[0]);
  94.  
  95.     // Stampo il risultato
  96.     printf("\n\nComposizione del vettore: ");
  97.     for (i = 0; i < n; i++)
  98.         printf("%d ", vect1[i]);
  99.  
  100.     free(ptr);
  101.     free(ptr1);
  102.     free(vect);
  103.     free(vect1);
  104.  
  105.     return 0;
  106. }
  107.  
  108. int* cerca(int *vect, int n, int valore)
  109. {
  110.     int i, j, *ptr;
  111.  
  112.     ptr = (int*) malloc(sizeof(int));
  113.     if (ptr == NULL) {
  114.         printf("Errore durante l'allocazione dinamica della memoria");
  115.         exit(EXIT_FAILURE);
  116.     }
  117.  
  118.     for (i = 0; i < n; i++)
  119.         if (valore == vect[i]) {
  120.             ptr[j++] = i;
  121.             ptr = (int*) realloc(ptr, (sizeof(int) * j+1));
  122.         }
  123.     ptr = (int*) realloc(ptr, (sizeof(int) * j+1));
  124.     if (ptr == NULL) {
  125.         printf("Errore durante l'allocazione dinamica della memoria");
  126.         exit(EXIT_FAILURE);
  127.     }
  128.     ptr[j] = ERR;
  129.  
  130.         return ptr;
  131. }
  132.  
  133. int* cerca_vettore_ordinato(int *vect, int n, int valore)
  134. {
  135.     int i, j, *ptr1;
  136.  
  137.     ptr1 = (int*) malloc(sizeof(int));
  138.     if (ptr1 == NULL) {
  139.         printf("Errore durante l'allocazione dinamica della memoria");
  140.         exit(EXIT_FAILURE);
  141.     }
  142.  
  143.     for (i = 0; i < n && valore >= vect[i]; i++)
  144.         if (valore == vect[i]) {
  145.             ptr1[j++] = i;
  146.             ptr1 = (int*) realloc(ptr1, (sizeof(int) * j+1));
  147.         }
  148.  
  149.     ptr1 = (int*) realloc(ptr1, (sizeof(int) * j+1));
  150.     if (ptr1 == NULL) {
  151.         printf("Errore durante l'allocazione dinamica della memoria");
  152.         exit(EXIT_FAILURE);
  153.     }
  154.     ptr1[j] = ERR;
  155.  
  156.         return ptr1;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment