Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- #include <time.h>
- #define ERR -1
- // Prototipi delle funzioni
- int* cerca(int *vect, int n, int valore);
- int* cerca_vettore_ordinato(int *vect, int n, int valore);
- int main()
- {
- int *vect, *ptr, *vect1, *ptr1;
- int n, i, cercato;
- srand((unsigned) time(NULL));
- // Chiedo all'utente quanti elementi vuole inserire nell'array
- printf("Inserisci il numero di elementi del vettore: ");
- scanf("%d", &n);
- while (n <= 0 || n > INT_MAX) {
- printf("Errore, devi inserire un numero positivo valido: ");
- scanf("%d", &n);
- while (getchar() != '\n');
- }
- // Alloco dinamicamente un array di interi composto da n elementi e controllo la corretta allocazione
- vect = (int*) malloc(n * sizeof(int));
- if (vect == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- return 1;
- }
- printf("\n\t\t ---- VETTORE NON ORDINATO ----\n\n");
- // Riempio il vettore con numeri casuali da 0 a 100
- for (i = 0; i < n; i++) {
- *(vect + i) = rand() % 100;
- }
- // Richiedo all'utente il numero da cercare ed eseguo un controllo per verificare che il numero inserito sia valido
- printf("\nInserisci un numero da cercare: ");
- scanf("%d", &cercato);
- while (n <= 0 || n > INT_MAX) {
- printf("Errore, devi inserire un numero positivo valido: ");
- scanf("%d", &cercato);
- while (getchar() != '\n');
- }
- ptr = cerca(vect, n, cercato);
- if (ptr[0] != -1) {
- for (i = 0; i < n && ptr[i] != ERR; i++)
- printf("\nCorrispondenza in posizione: %d", ptr[i]+1); //Inizio a contare le posizioni da 1
- } else
- printf("\nIl valore cercato non e\' stato trovato (codice errore: %d)",ptr[0]);
- // Stampo il risultato
- printf("\n\nComposizione del vettore: ");
- for (i = 0; i < n; i++)
- printf("%d ", vect[i]);
- printf("\n\n\n");
- // Seconda parte programma
- printf("\t VETTORE ORDINATO IN MODO CRESCENTE\n\n");
- // Alloco dinamicamente un array di interi composto da n elementi e controllo la corretta allocazione
- vect1 = (int*) malloc(n * sizeof(int));
- if (vect1 == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- return 1;
- }
- // Riempio il vettore con numeri casuali da 0 a 100
- for (i = 0; i < n; i++) {
- *(vect1 + i) = (rand() % 10) + (i * 10);
- }
- // Richiedo all'utente il numero da cercare ed eseguo un controllo per verificare che il numero inserito sia valido
- printf("Inserisci un numero da cercare: ");
- scanf("%d", &cercato);
- while (n <= 0 || n > INT_MAX) {
- printf("Errore, devi inserire un numero positivo valido: ");
- scanf("%d", &cercato);
- while (getchar() != '\n');
- }
- ptr1 = cerca_vettore_ordinato(vect1, n, cercato);
- if (ptr1[0] != -1) {
- for (i = 0; i < n && ptr1[i] != ERR; i++)
- printf("\nCorrispondenza in posizione: %d", ptr1[i]+1); //Inizio a contare le posizioni da 1
- } else
- printf("\nIl valore cercato non e\' stato trovato (codice errore: %d)\n\n",ptr1[0]);
- // Stampo il risultato
- printf("\n\nComposizione del vettore: ");
- for (i = 0; i < n; i++)
- printf("%d ", vect1[i]);
- free(ptr);
- free(ptr1);
- free(vect);
- free(vect1);
- return 0;
- }
- int* cerca(int *vect, int n, int valore)
- {
- int i, j, *ptr;
- ptr = (int*) malloc(sizeof(int));
- if (ptr == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < n; i++)
- if (valore == vect[i]) {
- ptr[j++] = i;
- ptr = (int*) realloc(ptr, (sizeof(int) * j+1));
- }
- ptr = (int*) realloc(ptr, (sizeof(int) * j+1));
- if (ptr == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- exit(EXIT_FAILURE);
- }
- ptr[j] = ERR;
- return ptr;
- }
- int* cerca_vettore_ordinato(int *vect, int n, int valore)
- {
- int i, j, *ptr1;
- ptr1 = (int*) malloc(sizeof(int));
- if (ptr1 == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < n && valore >= vect[i]; i++)
- if (valore == vect[i]) {
- ptr1[j++] = i;
- ptr1 = (int*) realloc(ptr1, (sizeof(int) * j+1));
- }
- ptr1 = (int*) realloc(ptr1, (sizeof(int) * j+1));
- if (ptr1 == NULL) {
- printf("Errore durante l'allocazione dinamica della memoria");
- exit(EXIT_FAILURE);
- }
- ptr1[j] = ERR;
- return ptr1;
- }
Advertisement
Add Comment
Please, Sign In to add comment