Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Divide and Conquer - ricerca massimo in un array

    Ho questo esercizio da fare:
    1. Algoritmo del massimo di un array 1D (di size qualunque, non necessariamente potenza intera di 2) di char, approccio divide et impera, implementato con tecnica ricorsiva e variante casuale. L’idea è quella dell’algoritmo implementato in max_radd, ma l’implementazione deve essere fatto con tecnica ricorsiva. La variante casuale prevede che, a ogni passo, una porzione di array (per esempio quella individuata dal primo indice =8 e dal secondo indice = 20) non venga divisa esattamente a metà, ma venga suddivisa in due parti per esempio (da 8 a k) e (da k+1 a 20) dove k è un numero casuale in (9,10,11,…,19). Quindi, per es., la prima suddivisione di array (1..n) avverrà scegliendoa caso un intero tra 2 e n-1 e non necessariamente scegliendo l’indice (n+1)/2.
    Il codice che ho scritto finora è questo:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    char max(char [],int );
    char confronto(char, char);
    int main()
    {
    int n,i,j;
    printf("Inserisci il numero degli elementi:\n");
    scanf("%d",&n);
    char a[n], massimo;
    srand(time(0));
    for (i=0; i<n; i++)
    {
    a[i]=rand();
    printf("a(%d)=%c \n",i,a[i]);

    }
    massimo= max(a, n);
    printf("Il massimo dell'array e' %c\n", massimo);
    system ("PAUSE");
    return 0;
    }
    char max(char a [], int n)
    {
    int numero_casuale,n1,n2;
    char max_elem, max_elem1, max_elem2;
    numero_casuale=1+rand()%(n);
    if (n==1) {
    max_elem=a[0];
    printf("Il massimo e' %c ", max_elem, "\n");
    }
    else if (n==2) {
    max_elem= confronto(a[0],a[1]);
    printf("Il massimo e' %c ", max_elem, "\n");
    }
    else { n=numero_casuale-n;
    max_elem1=max(a,numero_casuale);
    max_elem2=max(a[numero_casuale+1], n); ***
    max_elem=confronto(max_elem1,max_elem2);

    }
    return max_elem;
    }
    char confronto (char a, char b) {
    if (a>b) return a;
    else return b;
    }

    *** A questa linea il compilatore mi dà l'errore "[Warning] passing arg 1 of 'max' makes pointer from integer without a cast". Cosa significa?

    In ogni caso bastano le chiamate ricorsive max_elem1=max(a,numero_casuale); e max_elem2=max(a[numero_casuale+1], n); per esaminare tutto l'array?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ne stai già parlando qui.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.