Problema di programmazione C

di il
13 risposte

Problema di programmazione C

Il problema è questo;
una funzione main che chiede all'utente di inserire un int n e mette n valori in una lista collegata con puntatori e calcola il massimo tra essi.

io l'ho fatto così ma ancora non sono per niente pratico:

#include <stdlib.h>
#include <stdio.h>
main()
{
int n;
printf("inserire il valore di n:");
scanf("%d", &n);

struct list{
int value;
struct list *next_ptr;
};
struct list *ptr;
ptr=(struct list*)malloc(n*sizeof(int));

void massimo(struct list*ptr);
int max;
max=ptr->value;
while (ptr!=NULL){
if(max<&ptr->next_ptr){
max=&ptr->next_ptr;
}
printf("il massimo valore è :%d", max);
}
}
premetto: ci saranno sicuramente degli errori, vorrei delle dritte...

13 Risposte

  • Re: Problema di programmazione C

    nickbellucci ha scritto:


    una funzione main che chiede all'utente di inserire un int n e mette n valori in una lista collegata con puntatori e calcola il massimo tra essi.
    Ma questi n valori sono casuali o li deve inserire l'utente? In ogni caso, nel tuo codice non c'è alcun inserimento nella lista...
  • Re: Problema di programmazione C

    Presumo dal testo sia una lista di n valore (n da la dimensione della lista), ma i valori sono casuali; sicuramente non li ho inseriti in una lista, devo fare come un inserimento in testa?
  • Re: Problema di programmazione C

    Sì, l'inserimento in testa mi sembra una buona idea. Fai una funzione che si occupi dell'inserimento e poi la richiami n volte, ad esempio con un ciclo for, passandole valori casuali. Poi passi al problema del massimo.
  • Re: Problema di programmazione C

    Sto provando a farlo ma sono in alto mare...
  • Re: Problema di programmazione C

    nickbellucci ha scritto:


    Sto provando a farlo ma sono in alto mare...
    Andiamo bene...

    Ecco qui: prova a proseguire.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    typedef struct nodo_t {
    	int val;
    	struct nodo_t* next;
    } Nodo;
    
    typedef Nodo* Lista;
    
    Lista aggiungi_testa(Lista L, int n_val) {
    	Nodo* nuovo_nodo = malloc(sizeof(Nodo));
    	nuovo_nodo->val = n_val;
    	nuovo_nodo->next = L;
    	return nuovo_nodo;
    }
    
    void stampa_lista(Lista L) {
    	for(; L; L = L->next) {
    		printf("%d  ", L->val);
    	}
    	printf("\n");
    }
    
    
    int main(int argc, char const *argv[])
    {
    	// inizializzo il generatore di numeri casuali
    	srand(time(NULL));
    
    	Lista L = NULL;
    
    	int N;
    	printf("Inserire il numero di elementi: ");
    	scanf("%d", &N);
    
    	int i;
    	for(i=0; i<N; ++i) {
    		L = aggiungi_testa(L, rand() % 100);
    	}
    
    	stampa_lista(L);
    
    	return 0;
    }
    
  • Re: Problema di programmazione C

    Scusami per il disturbo, ho visto il tuo programma, nel tuo usi la typedef, nel mio testo non me lo fanno usare, mi scuso che non sono ad un buon livello e devo confrontarmi per capire meglio; ho provato a fare il programma senza type def, inoltre i valori sono assunti da tastiera:
    #include <stdio.h>
    #include <stdlib.h>

    struct list{
    int value;
    struct list*next;
    };

    struct list* inserisci(struct list**ptrptr, int valore){
    struct list*tmp_ptr;
    tmp_ptr=*ptrptr;
    *ptrptr=(struct list*)malloc(sizeof(struct list));
    (*ptrptr)->value=valore;
    (*ptrptr)->next=tmp_ptr;
    return (*ptrptr);
    }
    void massimo(struct list*ptr){
    int max;
    max=ptr->value;
    while(ptr!=NULL){
    if(max<&(ptr->next)){
    max=&(ptr->next);
    ptr=ptr->next;
    }
    }
    printf("il valore massimo è %d\n", max);
    }

    int main(){
    int n, valore;
    printf("Inserire il numero di elementi n: \n");
    scanf("%d", &n);
    struct list * ptr;
    ptr=NULL;
    int i;
    for(i=0; i<n; ++i){
    printf("inserisci un valore: \n");
    scanf("%d", &valore);
    ptr=inserisci(&ptr, valore);
    }
    massimo(ptr);
    }
    il programma mi esegue tutto, l'assunzione di valori e di n, ma non mi stampa il massimo...
  • Re: Problema di programmazione C

    Ma questo cosa vorrebbe dire?
    if(max<&(ptr->next))
    Il valore max va confrontato con il campo che hai chiamato "value", non con next.
  • Re: Problema di programmazione C

    Il mio intento era confrontare max, al quale ho assegnato il campo value, con il successivo...come lo scrivo?
  • Re: Problema di programmazione C

    
    if(max < ptr->next->value) ...
    
  • Re: Problema di programmazione C

    Ok, scusami se abuso del tuo tempo, modificando la funzione che cerca il massimo con quello che mi hai scritto lo riscrivo:

    void massimo(struct list*ptr){
    int max;
    max=ptr->value;
    while(ptr!=NULL){
    if(max<ptr->next->value){
    max=ptr->next->value;
    ptr=ptr->next;
    }
    }
    printf("il valore massimo è %d\n", max);
    probabilmente nel programma completo ci sarà qualche errore perchè ancora non mi stampa il massimo, mi potresti dire dove? ti ringrazio ancora
  • Re: Problema di programmazione C

    nickbellucci ha scritto:


    void massimo(struct list*ptr){
    int max;
    max=ptr->value;
    while(ptr!=NULL){
    if(max<ptr->next->value){
    max=ptr->next->value;
    ptr=ptr->next;
    }
    }
    printf("il valore massimo è %d\n", max);
    E' ancora questa funzione a non essere corretta. Esegui l'avanzamento ptr = ptr->next dentro all'if, ma quell'istruzione va eseguita in ogni caso! Prova con
    
    void massimo(struct list*ptr){
    	int max;
    	max=ptr->value;
    	while(ptr!=NULL){
    		if(max<ptr->value){
    			max=ptr->value;
    		}
    		ptr=ptr->next;
    	}
    	printf("il valore massimo è %d\n", max);
    }
    
  • Re: Problema di programmazione C

    FUNZIONA!! grazie mille per l'aiuto!
  • Re: Problema di programmazione C

    Prego!
Devi accedere o registrarti per scrivere nel forum
13 risposte