Newsgroup: it.scienza.informatica
Titolo: Problemi algoritmi

Ciao a tutti,
sto imparando il C e man mano che approfondisco il linguaggio, mi rendo
conto di avere parecchi problemi al livello algoritmico: infatti,pur
conoscendo le strutture sintattiche del linguaggio, se l'algoritmo da
implementare diventa un po' complesso ho dei seri problemi a scrivere il
codice, in generale credo che la mia sia una difficoltà "ad astrarre".
Potete consigliarmi come migliorare sotto questo punto di vista ?
Libri, Esercizi, qualsiasi cosa è ben accetta !
Grazie mille !
Roberto
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Libri, Esercizi, qualsiasi cosa è ben accetta !
Il tuo post mi sorprende.
Non tanto perchè hai difficoltà ad astrarre, che non è una cosa tanto
rara, ma perchè riesci a rendertene conto da solo.
Non ho mai sentito nessuno dire di se' una cosa del genere.  :-]
Adesso.... come migliorare?
Io una risposta definitiva non ce l'ho, dato che sto seguendo un corso
di laurea per fare quello che vuoi fare tu, certo è che innanzitutto
devi essere slegato dal linguaggio di programmazione che stai usando.
Non importa se stai usando il C, oppure il Pascal o il Basic,
l'importante è  la struttura dell'algoritmo (i cicli, le
condizioni...). Una volta scritto l'algoritmo con gli opportuni
strumenti potrai facilmente convertirlo in qualunque linguaggio.
Gli "opportuni strumenti" fino a qualche tempo fa erano i flowchart,
che ora sono in disuso per motivi che non ti sto a spiegare ora (ma se
vuoi saperli baasta dirlo).
Adesso per scrivere algoritmi si usa lo pseudocodice, che è "come un
linguagio di programmazione", ma non vincolato da una sintassi.
Ad esempio, se voglio scrivere un ciclo while in modo che sia chiaro e
svincolato dal linguaggio posso scrivere
while (la variabile non è zero) do
    scrivi il valore della variabile
    ....
La stessa cosa scritta in Pascal è
while i <> 0 do
  write(i)
  ...
La differenza sostanziale è che con lo pseudocodice ti concentri su
COSA stai facendo (ed è più facile seguire un algorimo dopo che lo hai
scritto SU CARTA), dopo averlo scritto ti preoccupi del COME FARLO (e
passi al linguaggio di programmazione).
Un altra cosa importante da acquisire è la scomposizione di un
problema grande in problemi più piccoli: se vuoi ragionare su un
problema grande rischi di perderti dopo poco.
Se lo scomponi in sottoproblemi (cioè in procedure piccole, che
possono anche essere di solo una istruzione) ti sarà molto più facile
gestirlo.
Questo è il "metodo dei raffinamenti successivi".
Uff... finito!
Non me ne vogliano i programmatori: mi rendo conto di aver concentrato
tante (troppe!) cose in poche righe, ma provateci voi a riassumere il
contenuto di almeno uno-due corsi di programmazione in un solo post
:-]
Saluti

 Potete consigliarmi come migliorare sotto questo punto di vista ?
Io ti consiglio di usare una notazione grafica come i flowchart.
Sono semplici e ti danno una visione intuitiva e diretta di
quello che succede. Usando carta e matita, prova a simulare
l'esecuzione di un algoritmo seguendone i passi sul flowchart.
Un casellario ti servira' per memorizzare le variabili e i loro
valori, che aggiornerai durante l'esecuzione.
Soprattutto...chiedi! :)
Ciao
HH

Leggere libri può aiutare, ma credo che l'unico modo di diventare bravi
programmatori sia l'esercizio.
Leggere un manuale di pittura o di musica può insegnarti delle tecniche, ma
non ti farà diventare un pittore o un compositore.
Allo stesso modo leggere dei libri o seguire dei corsi di programmazione può
insegnarti delle tecniche ma non ti renderà un programmatore.
Quanto ai diagrammi di flusso, penso che siano buoni solo come strumento
didattico, mentre lo pseudocodice non è altro che un linguaggio di
programmazione con la sintassi approssimativa, che quindi può prestarsi ad
interpretazioni ambigue che non sono possibili in un linguaggio vero.
Lo pseudocodice rischia quindi di generare confusione, inoltre prima di
poterlo testare devi "tradurlo" in un linguaggio vero, perdendo tempo e
aumentando la possibilità di commettere errori.
Quindi ti consiglio di iniziare con un linguaggio vero abbastanza semplice.
Per iniziare ti sconsiglierei il C che ha una sintassi un po' ostica, meglio
il pascal o il vecchio basic.
Poi una volta che ne impari a programmare in un linguaggio, passare agli
altri è molto semplice.