Possibilita' di ottenere un bonus!!

0 views
Skip to first unread message

Julinda

unread,
Nov 26, 2007, 5:04:52 AM11/26/07
to Programmazione1 pz 07-08
Ciao Ragazzi,

volevo dirvi che nelle soluzioni degli esercizi del secondo homework
che ho messo sul sito c'è un errore.
Sinceramente sono un po scontenta che ancora nessuno di voi lo ha
segnalato.
Per questo insieme al prof abbiamo deciso di farvelo sapere tramite la
mailing list.

Inoltre, colui che indovina per primo dove sta' l'errore insieme alla
rispettiva spiegazione del perche', e lo segnala per primo sulla
mailing list, alla fine avra' un bonus sugli homework.

In bocca al lupo a tutti
Julinda

Giuseppe

unread,
Nov 26, 2007, 6:07:45 AM11/26/07
to Programmazione1 pz 07-08
L'errore è relativo all'esercizio 1 sugli anagrammi.
Sono vari i casi in cui non funziona:
1) Non viene mai considerata l'ultima parola della frase e quindi se
questa è un anagramma di quella da cercare non viene mai stampata
2) la frase viene tokenizzata in base agli spazi ma se accade, come
nell'esempio fatto per l esercizio, che un' anagramma abbia vicino un
segno di punteggiatura senza spazi, ovviamente la parola non viene
considerata
3) mi sembra che la parola da cercare potesse contenere sia maiuscole
che minuscole ma l'esercizio non funziona se contiene lettera
maiuscole, in quanto le parole della frase sono sempre considerate
minuscole(tolower()).

Julinda

unread,
Nov 26, 2007, 6:46:24 AM11/26/07
to Programmazione1 pz 07-08
salve,

queste osservazioni sono giuste, pero' non sono la risposta a quello
che pensavo io. la cosa e' un
po' piu' complessa. Rispondo qua' sotto ad ogni sua segnalazione:

On Nov 26, 12:07 pm, Giuseppe <S.O.A.D...@gmail.com> wrote:
> L'errore è relativo all'esercizio 1 sugli anagrammi.
> Sono vari i casi in cui non funziona:
> 1) Non viene mai considerata l'ultima parola della frase e quindi se
> questa è un anagramma di quella da cercare non viene mai stampata

questo e' vero, pero' un suo colleca l'ha preceduta, ma tramite mail
diretta a me: ecco il testo

from valentini_simone <valentin...@libero.it>
to "julinda.stefa" <julind...@gmail.com>,
date Nov 26, 2007 12:22 PM
subject Re: [prog1-pz0708] Possibilita' di ottenere un bonus!!
mailed-by libero.it


Forse è nell'esercizio 2 ?

il ciclo:
"for(i = 0; (i < strlen(stringa)) && (corrente < numero_parole); i++)
{"
è errato perchè in questo modo non si considera l'ultima parola per
cui dovrebbe essere:

for(i = 0; (i < (strlen(stringa)+1) ) && (corrente < numero_parole); i+
+) {

e anche all'interno del ciclo, non si deve considerare solo il
carattere spazio ma anche la punteggiatura.
Nel caso della frase
"La porta si apre e cade una pera. Le rape e la pera" sarebbe
sufficente aggiungere una condizione per il punto, cioè al posto di:
"if (stringa[i] == ' ') { // caso carattere spazio "
questo: if (stringa[i] == ' ' || stringa[i] == ' ') {

e dopo l'ultima parola non ci sarà ne uno spazio ne un carattere di
punteggiatura, per cui va aggiunta anche la condizione per il
carattere terminatore, diventa:
if (stringa[i] == ' ' || stringa[i] == ' ' || stringa[i] == '\0') {

Infine in base alla presenza di punti, virgole etc. va modificato
anche l'incremento di "inizio" (che è i+1, ma dovrebbe essere i+2 se
c'è un punto seguito da uno spazio etc.) e di "i".

..Giusto ?

> 2) la frase viene tokenizzata in base agli spazi ma se accade, come
> nell'esempio fatto per l esercizio, che un' anagramma abbia vicino un
> segno di punteggiatura senza spazi, ovviamente la parola non viene
> considerata

se vedete i test con cui ho testato i vostri programmini, non ho usato
punteggiature
attaccate alle parole, ma ci ho sempre messo uno spazio di mezzo.
quindi
questa osservazione non e' valida in questo caso.

> 3) mi sembra che la parola da cercare potesse contenere sia maiuscole
> che minuscole ma l'esercizio non funziona se contiene lettera
> maiuscole, in quanto le parole della frase sono sempre considerate
> minuscole(tolower()).

sempre nei test che ho fatto, la parola P non conteneva mai maiuscole
quindi neanche questa osservazione vale, pur essendo giusta :-)



Ricapitolando: valentini simone per ora e' vincitore parziale, ma
comunque
l'errore e' piu' complesso!!!
vi invito di nuovo a segnalarlo

saluti
Julidna

Giuseppe

unread,
Nov 26, 2007, 8:46:49 AM11/26/07
to Programmazione1 pz 07-08
Apparte il fatto che neanche una parola singola nella frase viene mai
considerata indipendentemente da spazi successivi, comunque secondo me
il problema e nell'istruzione:

while (((current = getchar()) != EOF) && (current != '\n') && (i <
10)) //ho modificato io i<101 mettendo i<10 per fare il test

Succede che inserendo un stringa piu lunga dei caratteri
consentiti(nell esercizio 100) l'eccedenza dei caratteri viene
considerata come il pattern da ricercare.
Nel test da me fatto risulta:

ciao asdcfdciao //stringa inserita
2 //numero parole della stringa
ciao asdcf //porzione di stringa effettivamente letta
[10] //sua lunghezza
ciao //pattern da ricercare che è costituito dai caratteri in
eccedenza della stringa saltandone uno
[4] //lunghezza pattern considerato
<4> <4> //lunghezze delle parole effettivamente confrontate
ciao ciao //parole confrontate
ciao //output

In sostanza viene dato in output un risultato senza aver immesso alcun
pattern da ricercare.

On 26 Nov, 12:46, Julinda <Julinda.St...@gmail.com> wrote:
> salve,
>
> queste osservazioni sono giuste, pero' non sono la risposta a quello
> che pensavo io. la cosa e' un
> po' piu' complessa. Rispondo qua' sotto ad ogni sua segnalazione:
>
> On Nov 26, 12:07 pm, Giuseppe <S.O.A.D...@gmail.com> wrote:
>
> > L'errore è relativo all'esercizio 1 sugli anagrammi.
> > Sono vari i casi in cui non funziona:
> > 1) Non viene mai considerata l'ultima parola della frase e quindi se
> > questa è un anagramma di quella da cercare non viene mai stampata
>
> questo e' vero, pero' un suo colleca l'ha preceduta, ma tramite mail
> diretta a me: ecco il testo
>
> from valentini_simone <valentini_sim...@libero.it>
> to "julinda.stefa" <julinda.st...@gmail.com>,

Julinda

unread,
Nov 26, 2007, 9:13:58 AM11/26/07
to Programmazione1 pz 07-08
e non e' neanche questo.

tra' l'altro, essendo che come avevate gia' segnalato prima,
l'ultima parola non viene considerata,
quindi, se nella frase c'è un unica parola, appunto non verra'
considerata :-)

comunque, lasciate perdere cose di input output!!!

vi ho detto che il problema e' piu' complesso!!!

cercate piu' che altro nel modo in cui l'esercizio viene risolto!!!
(qua' dovete
ovviamente indovinare prima l'esercizio dove c'è l'errore!!!)

saluti
julinda

Giuseppe

unread,
Nov 26, 2007, 9:25:31 AM11/26/07
to Programmazione1 pz 07-08
Bhe allora nell esercizio 2 non capisco perchè il vettore che contiene
i numeri viene dichiarato double e l'allocazione viene però fatta con
float.
Questo potrebbe portare problemi in quanto double è a doppia
precisione mentre float a singola.

Julinda

unread,
Nov 26, 2007, 9:41:35 AM11/26/07
to Programmazione1 pz 07-08
e non e' neanche questo,

come ho gia' scritto prima, il problema sta' nella metodologia
usata per risolvere uno degli esercizi, c'è un errore concettuale
da qualche parte, che in qualche caso fa si' che l'output
del programma rispettivo sia errato!!!

Giuseppe

unread,
Nov 26, 2007, 10:48:28 AM11/26/07
to Programmazione1 pz 07-08
Premesso che se non è neanche questo mi arrendo.
Comunque sempre riguardo all esercizio 2, la selection sort è errata
ovvero non ordina il vettore degli elementi come dovrebbe quindi in
casi particolari in output è dato un numero di elementi distinti
maggiore di quello effettivo.
Ora o si corregge la selection sort e in questo caso il controllo
for (i = 1; i < n; i++){
if (numeri[i-1] != numeri[i]) conta = conta + 1;
}
rimane valido, oppure si elimina del tutto l ordinamento e si deve
modificare il controllo in maniera che ogni elemento sia confrontato
con tutti i precedenti e se diverso da tutti si incrementa il
contatore.

Julinda

unread,
Nov 26, 2007, 12:10:13 PM11/26/07
to Programmazione1 pz 07-08
e non e' neanche questo... :-) spiacente!!!

spero non si arrenda, tanto mica mi deve per forza rispondere subito.
basta che risponda il prima possibile!!!

Per quanto riguarda la selection sort, quella solamente ordina
l'array,
senza ne agigungere e ne togliere elementi!!!

saluti
Julinda

Giuseppe

unread,
Nov 26, 2007, 1:08:19 PM11/26/07
to Programmazione1 pz 07-08
Non intendevo dire che la selection sort aggiunge o toglie elementi,
intentevo dire che la selection sort non ordina poiche l algoritmo
scritto non funzionai quindi il controllo fatto noe è valido perche
gli elementi non sono ordinati e non basta confrontare il corrente con
il precedente. Anche questo sinceramente mi sembra un errore e si
presenta in certi casi infatti nei casi di testing non si presenta.
Comunque almeno mi dica se sono i primi due esercizi da considerare o
se sono proprio fuori strada.

Julinda

unread,
Nov 26, 2007, 1:23:24 PM11/26/07
to Programmazione1 pz 07-08
Salve,

sinceramente la selection sort mi sembra piu' che giusta, comunque non
le nascondo
che ora sono troppo stanca per verificarla. Comunque domani controllo
meglio e le dico.

Per quanto riguarda l'hint, ok, credo che se lo meriti: e' vero,
l'errore che intendo io
si trova nei primi 2 esercizi.

saluti
julinda

valentini_simone

unread,
Nov 26, 2007, 1:34:25 PM11/26/07
to prog1-pz0708
Nell'es.2
è errato:
if (!(numeri = calloc(n, sizeof(float)))) // allocazione di memoria

va corretto con:
if (!(numeri = calloc(n, sizeof(double)))) // allocazione di memoria

poichè poi abbiamo:
double num_corrente;
scanf("%f", &num_corrente);
numeri[i] = num_corrente;

Giuseppe

unread,
Nov 26, 2007, 2:01:07 PM11/26/07
to Programmazione1 pz 07-08
OK mi scusi se l ho pressata...comunque quando avrà tempo provi l
esercizio 2 con questo semplice input:
n=3
2
1
2
le verrà dato in output 3 invece di 2.
Ora tolga dalla funzione int* selection_sort(int* numeri, int n) il
controllo if (index_massimo).
Qusto controllo fa si che se l elemento più grande si trova nella
prima posizione non viene scambiato con l ultima.
Poi vi è la chiamata a questa funzione 2 volte nal main e in
conta_differenti ma è ininfluente.
La ringrazio.

On 26 Nov, 19:34, "valentini_simone" <valentini_sim...@libero.it>
wrote:

Julinda

unread,
Nov 27, 2007, 4:05:30 AM11/27/07
to Programmazione1 pz 07-08
salve,

quello che lei dice e' in parte corretto:
il fatto di dichiarare un numero come double e poi di allocare memoria
per un float
ha delle ripercussioni solo sul massimo positivo (minimo negativo)
numero rappresentabile con
quella variabile. Tra' l'altro con calloc nell'istruzione a cui lei
si riferisce vengono allocati
n caselle di sizeof(float), quindi, non c'è assolutamente nessun
problema con il numero n.
Se uno dice n, e' n.

al massimo, se uno usasse numeri piu' grandi di 2^31 -1 (lunghezza di
un float sulla mia macchina e' di 32 bit-di cui il primo va' per il
segno)
ci sarebbero dei problemi relativi eventualmente al segno del numero,
ma di sicuro non c'è nessun problema con il numero delle caselle (aka
numeri) che devono essere considerati.

quindi, ok, ammetto che e' stata una mia svista, ma questa istruzione
non da' nessun problema, almeno che, come le dicevo sopra,
non vengano usati numeri piu' grandi di 2^31-1.

comunque complimenti sia a lei che al suo collega Giuseppe, sia per
l'ambizia che per le giuste (ma non quella a cui mi riferivo io-
che come ho piu' volte ribatito non si tratta di una svista ma e' una
cosa molto molto profonda---algoritmica) osservazioni.

saluti
julinda

On Nov 26, 7:34 pm, "valentini_simone" <valentini_sim...@libero.it>
wrote:
Reply all
Reply to author
Forward
0 new messages