Informatica - aiuto sul programma di studio

niere
Per un'idoneità alla quinta devo studiare delle cose sugli algoritmi, cioè:

- Variabili e costanti, identificatori, valori scalari e non scalari
- Algoritmi, definizione e struttura
- Sequenze
- Algoritmi su dati scalari con risultati scalari
- Algoritmi su sequenze date con risultati scalari:
algoritmo di somma
algoritmo di prodotto
algoritmo di conteggio
algoritmo di uniformità
algortimo di esistenza
algoritmo di ricerca
- Algoritmi su dati scalati con risultati sequenze: esempi come enumerazione, numeri primi, scomposizione di importi in Euro e Cent.

In pratica cosa dovrei fare/sapere? sul libro che ho comprato (e c'era nella lista dei libri) non parla per niente degli algoritmi e cercando su internet non trovo niente, mi potete per favore aiutare? non so come fare nemmeno per esercitarmi, non ci sono per esempio degli esempi di algoritmi come questi?

Grazie mille in anticipo

Risposte
gundamrx91-votailprof
strano che non hai trovato nulla, soprattutto sugli algoritmi. Io ad esempio ho libri di algoritmi per il linguaggio C e Delphi, poi per quanto riguarda variabili, costanti, ecc. sono cose che trovi in quasi tutti i libri di programmazione di qualsiasi linguaggio.... il concetto di variabile non varia al variare del linguaggio ;)

niere
Non trovo però esempi o spiegazioni sui vari tipi di algoritmo. Ho un libro sul Visual Basic (infatti dopo gli algoritmi, nel programma di studio c'è il linguaggio Basic), e quindi su questo non ho problemi. Non so invece per gli algoritmi..

apatriarca
Si potrebbero scrivere parecchi libri sugli argomenti che hai chiesto. Che libri ti hanno consigliato? Forse ti possiamo consigliare un libro migliore della lista rispetto a quello che hai acquistato (o uno che non è nella lista).
Alcuni dei tipi di algoritmi da te elencati (come algoritmo di uniformità) non li conosco. Si tratta probabilmente di qualcosa che conosco con un nome diverso però. In molti casi avrei usato termini diversi, trovo ci sia in particolare un certo abuso del termine algoritmo. Il programma è inoltre ambiguo in molte parti.

niere
A me basta anche solo il minimo sugli algoritmi, l'esame ce l'ho a Settembre quindi devo per forza prepararmi solo sulle basi almeno, e vorrei non comprare l'ennesimo libro. Sulla lista dei libri della classe c'era: La gestione dei dati aziendali Atlas, in cui non c'è scritto niente sugli algoritmi, basic ecc.

Per Visual Basic ho il libro La programmazione Visuale - Visual Basic sempre della Atlas e dovrebbe essere sufficiente per la restante parte del programma (e comunque su visual basic riesco a trovare più spiegazioni anche su Internet.)

Sugli algoritmi invece non riesco a capirci niente..per esempio differenza tra valori scalari e non scalari quale sarebbe?

apatriarca
La differenza tra valori scalari e non scalari la dovresti conoscere dalla fisica quando hai visto i vettori. Un valore scalare è un valore numerico. Il termine è stato introdotto in fisica per distinguere appunto i valori numerici come il tempo e i valori vettoriali in cui sono necessari più valori per identificarli univocamente. Un vettore nello spazio è per esempio identificato da un modulo e una direzione (che è a sua volta definita da due valori) o dalle proiezioni sugli assi (che sono sempre 3 valori). Nel tuo caso la differenza è tra una variabile di tipo numerico e un array o una struttura (non conosco Visual Basic e non posso essere quindi più preciso o chiaro nella notazione che usi).

Ma tutti questi argomenti non li avete fatti a lezione? Non hai degli appunti di qualcuno su cui guardare questi argomenti?

niere
No, sono privatista..informatica è l'unica materia che, con questo tipo di programma, non so proprio come fare :(

gundamrx91-votailprof
Scusa ma almeno hai una tua idea di cosa sia un algoritmo?

niere
Ho fatto 2 anni fa qualcosa sugli algoritmi, ma pochissimo (al serale), e non ricordo quasi niente. So solo che sono dei diagrammi di flusso e servono per rappresentare un problema, credo.

gundamrx91-votailprof
Si, diciamo che a grandi linee un algoritmo e' un "procedimento" per risolvere un problema; il diagramma di flusso serve per rappresentare logicamente/graficamente l'algoritmo con i dati in input, i blocchi di elaborazione e, infine, gli eventuali dati in output.

Quando realizza un programma, qualsiasi esso sia, usi sempre degli algoritmi.... anche delle semplici sequenze di istruzioni potrebbero essere identificate come un algoritmo, anche se non e' proprio cosi' banale; infatti poi ci sono degli algoritmi codificati per risolvere dei ben determinati problemi (come quelli da te indicati). Considera poi che non c'e' mai un solo modo per risolvere un problema, quindi potresti avere diversi algoritmi, pero' di solito quelli "standard" sono i migliori (piu' efficienti, piu' veloci, piu' semplici, ecc.).

Ma come si crea un algoritmo? Prima di tutto parti dal problema scrivendo, letteralmente, cosa fa e/o richiede, successivamente cerchi di capire quali dati in input richiede e se deve produrre un output. A questo punto se il problema e' molto complesso puo' essere utile (quasi sempre) spezzarlo in sotto-problemi piu' piccoli, in modo da semplificare il lavoro; anche in questo caso identifichi i dati in input/output, come questi dati vengono gestiti (flusso di elaborazione), e cosi' via sino a descrivere nel complesso la soluzione al tuo problema. E senza ancora aver scritto una riga di codice :D

Infatti ora viene la parte piu' tecnica in cui devi "quantificare" meglio il tuo diagramma di flusso: a questo livello tratterai i singoli dati/controlli/elaborazioni/ecc. che ti porteranno successivamente alla scrittura del codice.

Mi rendo conto che quanto scritto sia veramente superficiale e, probabilmente, non rispecchia le regole di studio di un algoritmo, pero' spero almeno di averti chiarito un po' le idee e soprattutto dato qualche spunto per effettuare delle ricerche in proposito.

niere
Grazie mille della risposta, mi hai chiarito dei dubbi.
Ma se per es. sono io la prima a non riuscire a risolvere il problema, oppure boh lo interpreto in un modo diverso, sbaglio anche l'algoritmo?
Il fine ultimo è quello di avere un diagramma di flussi per risolvere un problema, per es. nell'algoritmo somma credo bisogna rappresentare l'operazione dell'addizione tra due dati input (a e b per esempio) per ottenere alla fine il dato output (c).

Ho visto un po' il grafico che bisogna fare, quindi devo partire con quello ovale scrivendo inizio, poi leggi dato a in un parallelogramma e leggi dato b nell'altro parallelogramma, poi li unisco nel rettangolo (operazione) e messo somma a + b, e dopo fine nell'altro ovale?

gundamrx91-votailprof
Sicuramente se hai una "percezione" errata del problema produrrai un algoritmo errato, ma in questi casi conviene analizzare il problema per gradi, scomponendolo in sotto problemi come ti ho scritto prima.

Per l'algoritmo di addizione mi sembra che ti sia tutto chiaro... se vuoi prova a postare qui il diagramma di flusso (lo devi fare come immagine ;) ).

ciao

niere
Ok, più o meno ho capito come fare..però sul programma c'è "sequenze", queste sequenze si riferisce ad un algoritmo semplice? cioè che c'è solo per es. inizio - dati input - operazione - fine ?

apatriarca
No, una sequenza (più propriamente una successione) è un insieme ordinato di numeri. Gli algoritmi a cui si fa riferimento in quella sessione sono quindi algoritmi che prendono in input una successione di numeri e restituiscono una nuova successione oppure un singolo numero.

Con "algoritmo di somma" si intende semplicemente il calcolo di una serie del tipo $\sum a_i$ con l'indice $i$ che varia all'interno di un ben preciso intervallo di valori e ogni $a_i$ è un numero ad esempio intero. Con "algoritmo di prodotto" intende il calcolo di una produttoria del tipo $\prod a_i$. Un algoritmo di ricerca prende una successione di numeri $a_i$, in cui ad esempio $a_i <= a_j$ se $i <= j$ e un numero $a$ e trova un indice $i$ (se esiste) tale che $a = a_i$. L'algoritmo comunemente insegnato prende il nome di binary search (ricerca binaria).

Un algoritmo non è diagramma di flusso nel modo più assoluto. Un diagramma di flusso è semplicemente un modo (a mio parere decisamente brutto e inefficiente) di rappresentare un algoritmo. Sono due cose diverse. L'esempio tipico di un algoritmo al di fuori dell'informatica è una ricetta di cucina. Un algoritmo è infatti una sequenza di istruzioni che "trasformano" l'input (gli ingredienti della nostra ricetta) nell'output del nostro algoritmo (il piatto che abbiamo deciso di preparare nel caso della ricetta). È questo l'esempio che devi avere in mente e non il diagramma di flusso. La lettura e la scrittura dei valori di input da o verso console o file non fa necessariamente parte dell'algoritmo e anzi spesso si omettono questi dettagli. Ma qualche post su internet non può certamente contenere tutto quello che devi studiare. Se proprio non puoi o vuoi acquistare un nuovo libro, almeno leggi wikipedia.

niere
Grazie della risposta. Su wikipedia però mi sembrano cose universitarie o approfondite, io devo solo dare un'idoneità professionale (nemmeno al tecnico come ragionerie programmatore o ITIS), quindi credo siano cose "semplici", o almeno spero..non so.
Sì, lo so che un forum non può essere come un libro o professore, ma io chiedevo più che altro una linea guida; nel programma di informatica poi non riesco a capire nemmeno cosa dovrei cercare (ad es. quando c'è "Algoritmi su dati scalari con risultati scalari" e "Algoritmi su sequenze date con risultati scalari", sono più o meno la stessa cosa?).
Comunque il proramma è quello che hanno fatto in classe durante l'anno in quarta classe professionale (poi c'è il resto del programma su visual basic, ma su quello ho già trovato guide ecc), e in alcune parti lo posso anche modificare, fa fede il mio di programma, anche se comunque devo portare gli argomenti che si fanno in una quarta professionale..

Quindi la parte sugli algoritmi la potrei riscrivere:
- informatica, informazioni;
- algoritmi: definizione, variabili e costanti, diagrammi di flusso;
- le sequenze quindi sarebbero gli algoritmi di somma, prodotto, ricerca, conteggio ecc? allora li metto direttamente tutti insieme senza fare dati scalari oppure non scalari..boh

apatriarca
Sono cose che vengono insegnate all'università, ma fatte in modo abbastanza superficiale. Gli argomenti non saranno esattamente quelli che hai fatto tu, ma almeno puoi leggerti la definizione di algoritmo e qualche utile esempio. In ogni caso non ho mai frequentato ad un professionale e neanche insegnato, per cui non ho idea di quale siano le cose insegnate.

Con "Algoritmi su dati scalari con risultati scalari" si intende semplicemente un algoritmo che dato un singolo valore numerico restituisce un nuovo valore numerico. Un esempio potrebbe essere un algoritmo che restituisce la radice quadrata del numero, oppure il logaritmo o il valore di un polinomio corrispondente al valore inserito in input.

Una sequenza è, come ti ho già detto, semplicemente un insieme di numeri ordinati (in cui ci potrebbero anche essere delle ripetizioni). Un esempio potrebbero essere i numeri naturali da 1 a 10 ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) oppure le prime 4 potenze di due ([1, 2, 4, 8]) o i primi 7 numeri della successione di fibonacci ([1, 1, 2, 3, 5, 8, 13]). In teoria le successioni potrebbero anche essere infinite ma in pratica in informatica si lavora sempre con successioni finite (in matematica invece l'infinito è utile). Con "Algoritmi su sequenze date con risultati scalari" si intende semplicemente un algoritmo che data una successione come quella degli esempi restituisca alla fine in output un singolo valore numerico. Considera per esempio l'algoritmo di somma come l'ha chiamato il tuo professore che somma gli elementi della successione tra di loro. Nel primo caso (i numeri naturali da 1 a 10) restituirebbe $1 + 2 + ... + 10 = 55$, nel secondo $1 + 2 + 4 + 8 = 15$. Immagino che il senso sia chiaro a questo punto.

gundamrx91-votailprof
"esmeralda881":
Ok, più o meno ho capito come fare..però sul programma c'è "sequenze", queste sequenze si riferisce ad un algoritmo semplice? cioè che c'è solo per es. inizio - dati input - operazione - fine ?


Ah! Ecco, quindi non era una semplice somma di due numeri... in questo caso ha ragione apatriarca sulla successione di numeri.... In definitiva, come ti scrivevo, "pensare" ad un algoritmo non e' banale, ma neanche impossibile. Bella la similitudine di apatriarca con le ricette, che forse ti rende meglio l'idea di come devi procedere: per gradi ;)

La definizione di algorirmo di wikipedia mi sembra un po' troppo pesante per un profano....se trovo qualcosa di piu' semplice te la indico.

Ciao

Rggb1
/OT
Un diagramma di flusso è semplicemente un modo (a mio parere decisamente brutto e inefficiente) di rappresentare un algoritmo.

Brutto e inefficiente? E perché?

Ah, questi fanatici di Java... :-D :-D :-D
TO/

Sul programma c'è riportato "sequenze"(?) Credo si riferisca ad altro che sequenze (successioni) numeriche, descrivi meglio se possibile.

apatriarca
Fanatico di Java?! Piuttosto il contrario a dire il vero... :shock:

I diagrammi di flusso sono inefficienti perché richiedono una enorme quantità di spazio anche per il più semplice concetto. Considera per esempio il diagramma di flusso di esmeralda per fare una semplice somma. Praticamente qualsiasi pseudocodice o linguaggio di programmazione è più efficiente da questo punto di vista. Sono forse più utili quando si lavora su concetti di più alto livello o per mostrare l'algoritmo a "profani", ma anche in questo caso ci sono a mio parere metodi migliori di presentare un algoritmo. Infine, scrivere un diagramma di flusso non è molto più difficile o veloce che scrivere il codice relativo nel linguaggio di programmazione preferito. Per quanto riguarda il "brutto", si tratta di gusto estetico personale e pertanto non mi sembra il caso di motivarlo. Se però credi nel valore o nella bellezza dei diagrammi di flusso potresti provare a dimostrarmi un esempio in cui un diagramma di flusso sia bello ed efficiente e magari proverò a mostrarti quali sono le soluzioni migliori di cui parlo.


Sul programma c'è riportato "sequenze"(?) Credo si riferisca ad altro che sequenze (successioni) numeriche, descrivi meglio se possibile.

So che sequenze ha altre definizioni in informatica, ed è per questo che ho detto che il termine più appropriato era successioni secondo me. Credo si riferisca alle successioni perché il termine è spesso contrapposto a valore scalare (nelle parti successive quando si parla degli algoritmi). Vuole quindi distinguere quando ha un singolo valore di un certo tipo e quando invece ne ha tanti. Ovviamente le successioni potrebbero anche non essere numeriche. Credi si riferisca a qualcos'altro?

niere
Boh, c'è scritto proprio solo "Sequenze.", il professore non si è sforzato più di tanto :lol:

Ok quindi algoritmi su dati scalari (un numero in poche parole, che poi può essere sotto radice, log ecc) con risultati scalari (e ridà come risultato un altro numero).
E algoritmi su sequenze date (quindi nell'esercizio ci possono essere per es. più numeri) con valori scalari (e ridà come risultato un altro numero). In questo caso sequenza è per es. "scrivere un algoritmo che legge una serie di numeri fino a quando l'utente digita -1, poi stampa la somma dei numeri"?
Qui la struttura dell'algoritmo è in sequenza?

Inizio
leggi x diverso da zero

Se x = -1
allora scrivi S + 1
altrimenti leggi x, s <- s+x (???)

Fine


Comunque ho trovato dei vecchi appunti, e c'è "struttura di sequenza", es. si legono da tastiera 2 numeri, se ne calcola la somma e la si visualizza:

Inzio
leggi n.1
leggi n.1
somma n.1 + n.2

visualizza somma

Fine

niere
Grazie mille Sergio, mi hai chiarito molto le idee!! :-D

Non ho capito però qui:

Esempio classico: l'algoritmo di Euclide per trovare il massimo comun divisore di due numeri positivi m e n:

1. zero = 0
2. leggi m
3. se m <= zero vai a 2 (ecco perché le operazioni devono essere numerate)
4. leggi n
5. se n <= zero vai a 4
6. dividi m per n e assegna il resto a r
7. se r = zero, vai a 11
8. m <- n (assegna a m il valore di n; si usa "=" per un test di uguagliaza, "<-" per l'assegnazione)
9. n <- r
10. vai a 6
11. visualizza n

L'operazione uno perchè hai mezzo zero = 0?

quindi se m è uguale a zero, deve tornare indietro e leggere di nuovo m, se invece è diverso da zero continua e legge n; se n è uguale a zero torna indietro e rilegge n, se invece n è diverso da zero si fa m/n = r ; se r è uguale a zero si termina l'algoritmo, se invece r è diverso da zero si mette m al posto di n e r al posto di n (cioè si divide n/r) e si rifà la divione.

Io ho anche problemi all'inizio dell'algoritmo ad assegnare la costante..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.