View Full Version : [C++]tutorial su liste, a livello di informatica 1
ciao a tutti!
tra qualche giorno ho l'esame di fondamenti di informatica 1, ed ho un grosso problema perchè ho lasciato il manualone di c++ a casa di un mio amico e non posso andarlo a riprendere (firenze, ed io sono ad aq...).
siccome ho qualche problemino per le liste volevo chiedere se qualcuno di voi conosce un qualche tutorial livello base per queste: so che in rete se digito liste c++ trovo sto mondo e quell'altro, ma io sto preparando informatica 1, quindi di template, classi e altra roba non so niente, e la sintassi del c++ che conosco è davvero limitata (primo esame di informatica...).
potete aiutarmi? le cose che devo riuscire a fare sono le classiche: saltare un elemento, aggiungere un elemento in testa/coda, stampare una lista al contrario o solo elementi con determinati paramentri....
grassie a chiunque mi aiuterà :D
Scusami, forse sarebbe utile una piccola chiarificazione su cosa intendi per "liste":
1) utilizzo delle STL std::list
2) devi creare tu le funzioni per l'allocazioe/de-allocazione degli elementi, gestire i singoli nodi della lista
Questo giusto per capire se ti serve un tutorial sull'uso delle STL (Standard Template Library) oppure un qualcosa di piu' generico sulle strutture dati in generale.
Ciao,
Mr Hyde
mmm direi la seconda...metto un esempio di programma del tipo carica lista stampa lista
#include<iostream>
#include<stdlib.h>
using namespace std;
struct elemento {
int valore;
elemento *succ;
};
int main ()
{
elemento *p;
elemento *p1;
int dim;
p=new elemento;
p1=p;
cout<<"inserisci la grandezza della lista ";
cin>>dim;
cout<<"inserisci il valore dell'elemento 0 ";
cin>>p1->valore;
for (int i=1; i<dim; i++)
{
p1->succ=new elemento;
p1=p1->succ;
cout<<"inserisci il valore dell'elemento "<<i<<" ";
cin>>p1->valore;
}
p1->succ=NULL;
p1=p;
cout<<"gli elementi inseriti sono: "<<endl;
while (p1!=NULL)
{
cout<<p1->valore<<" ";
p1=p1->succ;
}
system ("pause");
return 0;
}
per lista intendo uno struct del quale il primo campo è un campo qualsiasi (char, string, int, un altro struct, insomma qualsiasi cosa) ed il secondo campo è un puntatore del tipo elemento, dove elemento è proprio lo struct che ho creato.
il puntatore p è il puntatore che mi serve per memorizzare il primo oggetto (lo chiamo così perchè le parola "elemento", seppur adatta, porterebbe alla confusione col nome della struct) della lista, mentre il puntatore p è il puntatore che, di volta in volta, punta ad i vari oggetti della lista...
sono riuscito a spiegarmi?
ps le stl non so neanche cosa siano... ma è sicuro qualcosa che, al momento, non devo studiare (e questo mi basta :D )
OK, capito. Guardo se nei miei bookmark c'e' qualcosa che ti puo' essere utile (ma ahime' non credo)
Per le STL: sono una libreria di contenitori vari (tra cui le liste) che fanno uso dei template.
In pratica hai gia' le liste belle e pronte (e non solo le liste) con tutte le loro funzioncine per "maneggiarle".
Ad esempio, supponi di avere fatto la classe CPersona che contiene come attributi i dati anagrafici: sedevi creare una dista di persone ti bastera' dichiarare
std::list<CPersona> listaPersone;
e ovviamente hai tutti i metodi per aggiungere/togliere elementi dalla lista.
Altra cosa utilissima sono gli iteratori che ti permettono di "scorrere" tutti gli elementi della lista (ma esistono anche per tutti gli altri contenitori messi a disposizione dalle STL) e di operare su questi.
E ancora STL mettono a disposizione metodi per eseguire una determinata operazione su tutti gli elementi di una lista, evitandoti cosi' di scrivere il solito ciclo di scorrimento e di richiamo dell'operazione sul singolo elemento.
Insomma: nella programmazione "seria" SONO DA USARE. Capisco che ora tu abbia solo interessi "studenteschi" (leggi: superare l'esame) ma mi sembrava comunque giusto dirti della loro esistenza (anche se trovo grave che un corso sul C++ non affronti l'argomento... Oppure hai saltato qualche lezione? :-) )
Ciao,
Mr Hyde
nono, guarda io voglio approfondire ed imparare per bene...ma ora l'obbiettivo è l'esame :D
stl e classi ancora non le affronto...ma perchè non sono in programma!
sto facendo ingegneria informatica, primo anno, e questo è il primo esame di infromatica che c'è, quindi ce ne sarà di tempo per fare il resto...
ps se vuoi renderti conto di quale sia il programma per capire le mie "esigenze" ti posto il programma del corso
Fondamenti di informatica I (corso di laurea in Ingegneria Informatica - Automatica)
Docenti: Eliseo Clementini
Collegamenti culturali e finalità del corso
Il corso è finalizzato all'acquisizione dei concetti fondamentali dell'informatica, senza trascurare gli aspetti sperimentali della disciplina e la sua applicazione immediata. Si inizia con una descrizione del sistema informatico nella sua interezza, dalla rappresentazione dell'informazione ai software applicativi, per poi concentrarsi sulle tecniche di programmazione ad alto livello, con lo scopo di far maturare negli studenti l'abilità a progettare programmi e metterli in grado allo stesso tempo di utilizzare in maniera attenta e consapevole il software già esistente. Il linguaggio di riferimento sarà il C++, anche se i concetti presentati nel corso sono indipendenti dal linguaggio e facilmente applicabili in qualsiasi linguaggio imperativo come C o Pascal. Il corso è propedeutico per seguire il corso di Fondamenti di Informatica II.
Programma
1. Architettura dei sistemi informatici ([1], cap. 1-2).
Processi e processori. Problemi, algoritmi e programmi. Linguaggi di programmazione. Hardware e software: descrizione e classificazione. Architettura del calcolatore. Modello di von Neumann. Sistemi numerici posizionali a base fissa. Conversioni di base. Rappresentazione di numeri negativi in modulo e segno e in complemento a due. Rappresentazione di numeri reali in virgola mobile normalizzata. Codice ASCII. Algebra di Boole e principali funzioni logiche. Ambienti di programmazione Dev-C++ e Borland C++ Builder.
2. Elementi di programmazione ([1], cap. 1-2).
Sviluppo di algoritmi. Concetto di variabile. Operazioni elementari: lettura, scrittura, assegnazione e confronto. Diagrammi di flusso. Pseudo-codice. Struttura di controllo se-allora-altrimenti. Cicli con pre-condizione e post-condizione. Strutture di controllo finché-esegui e esegui-finché. Progettazione di algoritmi con cicli. Controllo sui dati di input. Traduzione in C++. Costrutti base del C++. Struttura di un programma. Parte dichiarazioni e parte istruzioni. Dichiarazione di variabili. Classificazione dei tipi. Tipi semplici, rappresentazione interna e operazioni. Espressioni numeriche e condizionali. Istruzione di assegnazione. Istruzione composta. Selezione binaria. Funzioni standard di ingresso/uscita. Istruzioni cicliche (WHILE, DO-WHILE, FOR). Costruzione di cicli annidati. Selezione n-aria.
3. Programmazione con tipi strutturati ([1], cap. 3, escluso 3.5 e 3.6; cap. 6; cap. 7, fino a 7.4).
Tipo array: definizione e rappresentazione in memoria. Dichiarazioni di tipo con typedef. Programmi su vettori. Array bidimensionali. Programmi su matrici. Tipo string. Tipo struct. Tipo file. Primitive per la gestione sequenziale dei files.
4. Aspetti avanzati di programmazione ([1], cap. 4, escluso 4.3.4; cap. 8, escluso 8.4 e 8.6; cap. 9, fino a 9.2.4).
Sottoprogrammi. Progettazione top-down. Parametricità. Dichiarazione di funzioni. Variabili globali. Variabili locali. Parametri formali e attuali. Passaggio di parametri per riferimento e per valore. Uso della memoria. Ciclo di vita delle variabili. Visibilità delle variabili. Mascheramento di variabili. Ricorsione. Gestione statica e gestione dinamica della memoria. Tipo puntatore. Operazioni con puntatori: assegnazione, new, delete, riferimento, dereferenziazione. Costante null. Uso dei puntatori. Creazione dinamica di array. Similitudine tra array e puntatori. Creazione dinamica di matrici. Strutture collegate in memoria dinamica. Liste collegate con puntatori. Programmi su liste collegate.
nessuno mi aiuta? :cry:
l'esame è mercoledì... e lunedì ho pure fisica :muro:
Visto quello che hai scritto direi che ti servono 2 tipi di corsi/guide:
1) sulla sola sintassi C++ (insomma, il C++ di base)
2) su algoritmi e strutture dati.
Per il primo tipo ho trovato
http://www.math.unipd.it/~sperduti/CORSO-C++/Corso%20C++.htm
(occhio pero': mi sembrava di aver visto esempi con una versione di C++ "datata")
Per il secondo tipo:
http://www.alessioluffarelli.it/guide_tutorial/alberi_binari.php (per gli alberi binari, nel caso prima o poi ne avessi bisogno)
Un po' di tutto:
http://programmiamo.blogspirit.com/archive/2006/01/13/tutorial-programmazione.html
Questi li ho semplicemente trovati con google cercando "tutorial strutture dati".
Non voglio bacchettarti: capisco che nel tuo caso forse non sai ancora quali sono i termini da usare per le ricerche.
Spero comunque che 'sta roba ti possa essere utile (certo che anche tu dare fisica attaccato a fondamenti... :-) )
Ciao,
Mr Hyde
eheh... purtroppo non sono io che decido, nella sessione di marzo ci sono due appelli per tre esami, ed analisi ho bisogno di un pò + di tempo per studiarmela :)
cmq grazie mille per le info, questa sera mi spulcio un pò sti link e ti faccio sapere :D
ps gli alberi binari credo siano di informatica due...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.