Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Parabole in liste concatenate

    Ciao a tutti, vi seguo da tempo immemore e grazie alle vostre guide sono sempre riuscito a risolvere i miei problemi, ma adesso ho proprio bisogno del vostro aiuto...

    Mi hanno dato questo esercizio da svolgere in linguaggio C:
    "Si definisca un tipo di struttura dati PB per memorizzare rappresentazioni in forma implicita (y=a*x*x+b*x+c) di parabole. Si realizzi una funzione che legge da tastiera un numero non predeterminato di rappresentazioni implicite di parabole e le memorizza in una lista LstPB. si realizzi una funzione che prende in ingresso le coordinate di un punto del piano reale e determina a quante, tra le parabole memorizzate in ListPB, esso appartiene."

    Ora, premettendo che io e il C siamo due cose diverse, potete darmi qualche indicazione su come svolgerlo? Almeno per il momento vorrei provare a farlo da solo (anche se qualcosa mi dice che presto chiederò la soluzione completa), ma non so proprio come partire... Ad esempio, in che modo posso memorizzare in una struttura le parabole in forma implicita?

    Grazie a tutti quelli che sapranno aiutarmi

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La struttura del singolo nodo della lista, mi sembra semplice ...

    codice:
    struct para
    {
       double a;
       double b;
       double c;
       struct para *next;
    };
    Il resto dell'esercizio ... a te (non sono gradite richieste di completa scrittura del codice ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Devo dire che non sono messo tanto male, avevo ipotizzato anche io una struttura fatta in quel modo, ma non so perché mi dava molti dubbi... Ok, vediamo che riesco a combinare, in caso chiederò un altro aiuto

  4. #4
    Ci mancava anche la sfortuna... Non so per quale motivo, ma sotto Windows molti programmi C vanno in crash durante l'input dei dati (anche programmi che so per certo corretti e funzionanti), e anche questo esercizio mi dà problemi . Nel frattempo che rimetto su Linux, qualcuno può dirmi se sto procedendo bene? Per il momento ho cercato di inserire i valori nella lista, ma nelle guide ho trovato solo esempi di liste con un solo elemento, è corretto l'input come l'ho fatto io?

    codice:
    #include <stdio.h>
    
    struct PB {
           double a;
           double b;
           double c;
           struct PB *next;
    };
    
    struct PB *crea_parabole();
    
    
    int main() {
        struct PB *parabole;
        parabole = crea_parabole();
    }
    
    struct PB *crea_parabole(){
           struct PB *p, *punt;
           int i, n;
           
           printf("Specificare il numero di elementi: ");
           scanf("%d", &n);
           
           if (n == 0) {
              p = NULL;
           } else {
                  p = (struct PB *)malloc(sizeof(struct PB));
                  printf("Inserisci il primo valore: ");
                  scanf("%f %f %f", &p->a);                                   <-----------------------
                  punt = p;
                  
                  for (i = 2; i <= n; i++) {
                      punt->next = (struct PB *)malloc(sizeof(struct PB));
                      punt = punt->next;
                      printf("Inserisci il %d° elemento: ", i);
                      scanf("%f %f %f", &punt->a);                           <-----------------------
                  }
                  punt->next = NULL;
           }
           return(p);
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non dipende da Windows o da Linux, anzi, mi sembra strano che non dia errori anche su Linux ...

    Non ho visto tutto, ma questo

    scanf("%f %f %f", &punt->a);

    e' sicuramente sbagliato ... hai 3 campi in input e una sola variabile ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    Non dipende da Windows o da Linux, anzi, mi sembra strano che non dia errori anche su Linux ...

    Non ho visto tutto, ma questo

    scanf("%f %f %f", &punt->a);

    e' sicuramente sbagliato ... hai 3 campi in input e una sola variabile ??
    Su Linux non ho ancora provato, per questo ho detto "nel frattempo che rimetto su Linux" . Ad ogni modo Windows mi dà errore (ovvero è la finistra DOS che va proprio in crash) mentre sto inserendo gli input del programma, e questo anche con altri programmi che dovrebbero funzionare (ad esempio un banalissimo "somma due numeri" mi va in crash).

    Per quanto riguarda scanf, il fatto è che se metto le tre variabili proprio non mi fa inserire niente, ma va avanti senza input... Allora ho provato a scrivere così e qualcosa me lo faceva scrivere, prima di crashare.

    Ad ogni modo, concettualmente parlando: ho una struttura sotto forma di lista con tre campi, quindi in una scanf dovrei richiedere 3 campi di input legati ognuno ad una variabile, giusto? Oppure nelle liste concatenate devo solo indicare la prima variabile in cui scrivere e poi automaticamente gli altri dati vengono inseriti in ordine nei campi successivi?

    Abbiate pazienza, tutti noi siamo stati niubbi

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi chiedere 3 valori, i parametri a, b e c della parabola per inserirli in un nodo della lista.

    La scanf deve prevedere 3 variabili che devi inserire nella linea separati da uno spazio e terminati dall'invio, ad esempio

    1 2 3
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Originariamente inviato da oregon
    Devi chiedere 3 valori, i parametri a, b e c della parabola per inserirli in un nodo della lista.

    La scanf deve prevedere 3 variabili che devi inserire nella linea separati da uno spazio e terminati dall'invio, ad esempio

    1 2 3
    Innanzitutto ti ringrazio per l'aiuto che mi stai dando

    Dunque, io ho realizzato questo codice...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    struct PB {
           int a;
           int b;
           int c;
           struct PB *next;
    };
    
    struct PB *crea_parabole();
    void visualizza_parabole(struct PB *, int x, int y);
    
    
    int main() {
        struct PB *parabole;
        int x;
        int y;
        
        parabole = crea_parabole();
        printf("Inserire le coordinate x ed y: ");
        scanf("%d %d", &x, &y);
        visualizza_parabole(parabole, x, y);
    }
    
    struct PB *crea_parabole(){
           struct PB *p, *punt;
           int i, n;
           
           printf("Specificare il numero di nodi: ");
           scanf("%d", &n);
           
           if (n == 0) {
              p = NULL;
           } else {
                  p = (struct PB *)malloc(sizeof(struct PB));
                  printf("Inserisci l'elemento nel nodo 1: ");
                  scanf("%d %d %d", &p->a, &p->b, &p->c);
                  punt = p;
                  
                  for (i = 2; i <= n; i++) {
                      punt->next = (struct PB *)malloc(sizeof(struct PB));
                      punt = punt->next;
                      printf("Inserisci l'elemento nel nodo %d: ", i);
                      scanf("%d %d %d", &p->a, &p->b, &p->c);
                  }
                  punt->next = NULL;
           }
           return(p);
    }
    
    void visualizza_parabole(struct PB *p, int x, int y) {
         while (p != NULL) {
               if ( y == ((p->a)*x*x) + ((p->b)*x) + (p->c) ) {
                  printf("Parabola trovata");
                  printf("%d %d %d\n", p->a, p->b, p->c);
               }
               p = p->next;
         }
         printf("NULL");
    }
    ... che, ahimè, non funziona

    1) Prima di tutto sai dirmi quale libreria devo usare per malloc? Chi dice malloc.h, chi dice che basta stdlib.h

    2) Logicamente parlando, l'espressione per vedere se i punti corrispondo alla parabola è giusta oppure no (ovviamente parlando della logica del C, almeno l'equazione matematica della parabola la so )

    3) La parte dell'inserimento delle parabole mi sembra funzioni, ma se la funzione visualizza_parabole la scrivo in modo semplice solo per visualizzare i dati, cioè

    codice:
    void visualizza_parabole(struct PB *p) {
         while (p != NULL) {
               printf("%d %d %d\n", p->a, p->b, p->c);
               p = p->next;
         }
         printf("NULL");
    }
    mi visualizza questo (ipotizzando di voler inserire tre parabole)


    Dov'è che sbaglio?
    PS: ho usato gli int per comodità...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un errore ... deve essere

    scanf("%d %d %d", &punt->a, &punt->b, &punt->c);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Originariamente inviato da oregon
    Un errore ... deve essere

    scanf("%d %d %d", &punt->a, &punt->b, &punt->c);
    Ti ringrazio infinitamente... La cosa bella è che per il troppo sonno non ho letto la tua correzione, pensavo che mi avessi semplicemente indicato il pezzo sbagliato, quindi alla fine ci sono arrivato da solo a capire l'errore .

    Adesso sembra funzioni bene, pensi che il codice sia buono o funziona solo per caso? (anche se ho fatto dieci minuti buoni di prove, non credo ci siano errori grossolani...).

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.