Esercizio di Programmazione

di il
7 risposte

Esercizio di Programmazione

Salve ragazzi,
mi servirebbe un favore.Questa mattina ho fatto l'esame di programmazione 1 e domani mattina devo portare al prof.re il programma su una pennette usb funzionante.Mi potreste dare una mano a risolverlo?Grazie mille a chiunque mi aiuterà

La traccia è questa:
Generare una lista di numeri interi e stamparla.Quindi individuare e stampare tutte le sottoliste(prive di intersezioni)in cui la somma degli elementi sia minore della media tra l'elemento minimo e max dell'intera lista.Organizzare il programma in funzioni,senza utilizzare array o liste ausiliari

7 Risposte

  • Re: Esercizio di Programmazione

    Scusa ma quindi cos'è che chiedi? spero non la soluzione..
  • Re: Esercizio di Programmazione

    Mi sa proprio che chiede la soluzione e il codice completo da presentare al professore.

    Ma ha sbagliato forum.
  • Re: Esercizio di Programmazione

    Io vi metto la mia soluzione e mi dite se è fatta bene o se è sbagliato qualcosa eventualmente aiutare a correggerlo
    #include <stdlib.h>
    #include <stdio.h>
    struct nodo {
      int info;
      struct nodo *next;
    };
    
    struct nodo *leggi_lista(void) {
      struct nodo *p, *primo=NULL;
      int i, n;
    
    
      scanf("%d", &n);
      for (i=0; i<n; i++) {
        scanf("%f", &x);
        p = malloc(sizeof(struct nodo))(void);
        p->info = x;
        p->next = primo;
        primo = p;
      }
      return(primo);
    }
    
    
    void stampa_lista(struct nodo *p) {
      while (p != NULL) {
        printf("%f --> ", p->info);
        p = p->next;
      }
      printf("NULL\n");
      return;
    }
    
    
    intmax(struct nodo *p) {
     int m;
    
      m = p->info;
      while (p != NULL) {
        if (m < p->info)
          m = p->info;
        p = p->next;
      }
      return(m);
    }
    
    /*
     *  Restituisce il valore del minimo elemento della lista.
     */
    
    int min(struct nodo *p) {
      int m;
    
      m = p->info;
      while (p != NULL) {
        if (m > p->info)
          m = p->info;
        p = p->next;
      }
      return(m);
    }
    
    void calcola(struct nodo *p) {
      float media, somma;
    
      media = (min(p) + max(p))/2.0;
      somma = 0.0;
      while (p != NULL) {
        if (somma + p->info < media) {
          somma = somma + p->info;
          printf("%f ", p->info);
          p=p->next;
        } else {
          printf("\n");
          somma = 0.0;
          if (p->info >= media)
            p = p->next;
        }
      }
      return;
    }
    
    int main(void) {
      struct nodo *primo;
    
      primo = leggi_lista();
      stampa_lista(primo);
      calcola(primo);
      return(1);
    }
    
  • Re: Esercizio di Programmazione

    Ma te l'hai provato? Perché a me da già errori in compilazione...
  • Re: Esercizio di Programmazione

    Si infatti mi dà un errore persistente sulla malloc ke non riesco a capire,cerco di sistemare ma poi mi dà problemi sulla void iniziale...
  • Re: Esercizio di Programmazione

    L'errore è che apri 2 serie di parentesi sulla malloc, in questo modo
    "p = malloc(sizeof(struct nodo))(void)".

    Invece dovresti fare così:
    "p = (struct nodo*) malloc(sizeof(struct nodo))"

    Inoltre la logica che usi nella funzione leggi_lista è sbagliata, nel senso che non ti porta ad avere una lista alla fine.
    Un modo semplice per crearla potrebbe essere questo:
    1) Chiedi all'utente quanti elementi vuole mettere
    2) Crei il primo elemento della lista
    3) Crei gli altri N-1 elementi all'interno di un ciclo

    In questo modo hai un puntatore permanente al primo elemento e agisci solo sui successivi..

    PS: in una scanf usi %f invece di %d!
  • Re: Esercizio di Programmazione

    Sicuramente vanno prima corretti gli errori, ad esempio in

    scanf("%f", &x);
    p = malloc(sizeof(struct nodo))(void);
    p->info = x;

    e in

    intmax(struct nodo *p) {
Devi accedere o registrarti per scrivere nel forum
7 risposte