Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    3

    [C] facile esercizio sulle liste

    Ciao, l'esercizio è definire una lista di elementi che rappresentano punti sul piano cartesiano, quindi scrivere una funzione che legga due valori float e metta il punto con quelle coordinate in cima alla lista, infine scrivere una funzione che stampi la lista.
    Il compilatore non mi dà errori, ma il programma non funziona (il terminale dice "Bus error: 10")
    Cosa sbaglio?

    Grazie

    codice:
    <stdio.h>
    #include <stdlib.h>
    
    typedef struct EL{
      float Ascissa;
      float Ordinata;
      struct EL  *next;} Punto;
    
    void stampa(Punto lista){
      Punto current=lista;
    
      while(current.next !=NULL){
        printf("(%f,%f) ",current.Ascissa,current.Ordinata);
        current=*(current.next);
      }
    }
    void TOP(Punto lista, float A, float O){
      Punto *newstart;
      newstart=malloc(sizeof(Punto));
      (*newstart).Ascissa=A;
      (*newstart).Ordinata=O;
      *((*newstart).next)=lista;
      
      lista=*newstart;  
    }
    
    int main(){
      float A;
      float O;
      Punto start;
      
      while(1>0){
        scanf("%f",&A);
        scanf("%f",&O);
        TOP(start,A,O);
        stampa(start);
      }
      return 0;

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Non sono molto pratico e non so a cosa si riferisce quell'errore che hai detto però ci provo...per la lista devi prevedere un puntatore a punto e non semplicemente un "punto".Poi gli accessi si possono fare con l'operatore freccia...è fatto apposta no?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Direi proprio che devi cambiare il codice e usare i puntatori ...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct EL
    {
      float Ascissa;
      float Ordinata;
      struct EL  *next;
    } Punto;
    
    void stampa(Punto *lista)
    {
      Punto *current=lista;
    
      while(current)
      {
        printf("(%f,%f) ",current->Ascissa,current->Ordinata);
        current=current->next;
      }
    }
    
    void TOP(Punto **lista, float A, float O)
    {
      Punto *newstart;
      newstart=(Punto *)malloc(sizeof(Punto));
      newstart->Ascissa=A;
      newstart->Ordinata=O;
      newstart->next=*lista;
      
      *lista=newstart;  
    }
    
    int main()
    {
      float A, O;
      Punto *start=NULL;
      
      while(1>0)
      {
        scanf("%f",&A);
        scanf("%f",&O);
        TOP(&start,A,O);
        stampa(start);
      }
    
      return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.