Compito d'esame universitario

di il
4 risposte

Compito d'esame universitario

Ciao a tutti, mi stò affacciando al c++, lo studio, lo pratico ma trovo dei problemi con gli esercizi di esame..posto la traccia sperando che qualcuno mi possa illuminare

1)Scrivere una funzione che, date due liste collegate contenenti numeri interi, crei una terza lista che contenga la somma degli elementi in posizioni corrispondenti. Se una delle liste date contiene piu elementi dell'altra, bisogna aggiungerli alla terza lista.
esempio: se la liste collegate contengono i valori (8,3,6) e (5,1,12,2,4) la lista da creare dovrà conetenere i valori (13,4,18,24)
strutture dati richieste: liste concatenate con record e puntatori
richieste aggiuntive: scrivere un breve programma principale

2) Progettare una struttura dati idonea a rappresentare le parole di un vocabolario della lingua italiana, utilizzando un array di puntatori iniziali a liste concatenate, in cui ogni lista contiene le paole che iniziano con una certa lettera dell'alfabeto. Con le dichiarazioni date, scrivere un frammento di codice che stampi le paole con iniziano con la lettera z.


spero che ci sia qualcuno che possa aiutarmi..sono in alto mare..faccio troppa confusione e non riesco a capire come agire

4 Risposte

  • Re: Compito d'esame universitario

    Ciao, per prima cosa devi capire come funziona una lista. Una lista non è altro che un puntatore ad una sequenza di celle. Una cella può essere fatta dall'elemento che contiene e da un puntatore alla cella successiva
    
    typedef struct{
       int valore;
       cella * succ;
    }cella;
    
    La tua lista sarà un puntatore a questa struttura
    
    typedef lista * cella;
    
    Ora su questa struttura devi farti una serie di funzioni per inserire una nuova cella, leggere da una cella, ecc
    Magari provaci te e se hai dei problemi cerco di darti una mano

  • Re: Compito d'esame universitario

    Ti ringrazio per le risposta, solo che non riesco proprio a risolvere quell'esercizio..sà come fare paragoni tra due liste e quindi vedere i numeri in piu, cosi da metterli nella nuova lista da creare..ma sò scrivere poco di questo soprattutto non sò come farlo usando record e puntatori, questo riguardo il primo esercizio
  • Re: Compito d'esame universitario

    Ti allego il codice che implementa una lista, la crea, inserisce delle celle e scorre i valori inseriti. Da questo codice dovresti riuscire a risolvere il tuo esercizio. Se hai problemi fammi sapere
    
    #include <stdio.h>
    #include <stdlib.h>
    
    struct cella{
    	
    	int valore;
    	struct cella * successivo;
    	struct cella * precedente;
    	
    };
    
    typedef struct cella * lista, * posizione;
    
    void creaLista(posizione * p, lista * l){
    	
    	*l = (struct cella *) malloc(sizeof(struct cella));
    	(*l)->successivo = *l;
    	(*l)->precedente = *l;
    	
    	*p = *l;
    	
    }
    
    int listaVuota(lista l){
    	
    	if (l->successivo == l->precedente)
    		return 1;
    	else
    		return 0;
    	
    }
    
    int fineLista(posizione p, lista l){
    	
    	if (p->successivo == l)
    		return 1;
    	else
    		return 0;
    	
    }
    
    posizione primoLista(lista l){
    	return (l->successivo);
    }
    
    posizione succLista(posizione p, lista l){
    	return (p->successivo);
    }
    
    posizione precLista(posizione p, lista l){
    	return (p->precedente);
    }
    
    int leggiCella(posizione p, lista l){
    	return p->valore;
    }
    
    void insCella(posizione * p, int valore, lista l){
    	
    	struct cella * temp = (struct cella *) malloc(sizeof(struct cella));
    	
    	temp->valore = valore;
    	temp->precedente = (*p)->precedente;
    	temp->successivo = *p;
    	temp->precedente->successivo = temp;
    	(*p)->precedente = temp;
    	
    	
    	*p = temp;
    	
    }
    
    int main(){
    	
    	int i, n;
    	lista l;
    	posizione p;
    	
    	creaLista(&p, &l);
    	
    	for (i = 0; i < 10; i++){
    		insCella(&p, i, l);
    	}
    	
    	p = primoLista(l);
    	while (fineLista(p, l) == 0){
    		n = leggiCella(p, l);
    		printf("%d\n", n);
    		p = succLista(p, l);
    	}
    	
    	n = leggiCella(p, l);
    	printf("%d\n", n);
    
    	
    }
    
    
  • Re: Compito d'esame universitario

    Ciao, vi prego potete fornirmi la soluzione di entrambi gli esercizi sopra scritti?
    Vi prego non sò come posso fare!
Devi accedere o registrarti per scrivere nel forum
4 risposte