Newsgroup: it.comp.lang.visual-basic
Titolo: Ho bisogno di un'opinione

Ciao a tutti, posto su questo newsgroup, ma potrei postare in qualunque
altro newsgroup di programmazione, in quanto ho bisogno di un'opinione da
programmatori (esperti e non).
In seguito al seguente problema, è nata una diatriba tra me e la mia
professoressa in quanto abbiamo visioni diverse dello stesso.
Il problema è il seguente:
Considerare il seguente algoritmo di hashing: Data la sigla di una nazione,
ad esempio "ITA" (al massimo 3 lettere), si converte ogni lettera in un
numero di 2 cifre (corrispondente alla sua posizione nell'alfabeto). Per
esempio per "ITA" si ottiene 092001. Il codice hash della sigla è il resto
della divisione intera per 19. Trovare il codice hash di "FR"
Non avete bisogno di eseguire tutto l'esercizio, mi interessa come
comporreste voi il numero corrispondente a "FR", tenendo conto esattamente
del testo, cioè semplicemente seguendo le istruzioni assegnate. Quando avrò
ricevuto qualche risposta, vi spiegherò esattametne da cosa è nata la
diatriba, non lo faccio ora per evitare di falsare le risposte. Vi ringrazio
in anticipo :) Ciao a tutti!

 comporreste voi il numero corrispondente a "FR"
un ciclo sulla len della stringa
un mid per prendere un carattere
una differenza tra l'asc di a e quello del carattere preso, aumentato di uno
una somma.
il problema logico è sulla somma: il numero corrispondente a fr è 22 o 0616
(l'ho fatto a mente, forse ho dimenticato di considerare jk e compagnia)?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 della divisione intera per 19. Trovare il codice hash di "FR"
Non capisco il problema.
Qual è l'algoritmo da usare?
O il problema è scegliere un algoritmo?
Se è questo, e se un presupposto è che le stringhe vanno a 1 car. a 3 car.
la scelta se calcolarne un terzo comunque è indifferente.
Se l'algoritmo dovesse essere generico non ha senso fare il "riempimento" a
3.
Ciao
--
Math Parser : 
http://www.neodatatype.net
FlowChart   : 
http://www.neodatatype.net/dump/flowchart/dir.asp
Sito Comune : 
http://www.it-lang-vb.net

 ricevuto qualche risposta, vi spiegherň esattametne da cosa č nata la


 (l'ho fatto a mente, forse ho dimenticato di considerare jk e compagnia)?
Ricordami di non chiederti mai di scrivermi un pezzo di codice :-P
;-D

 Ricordami di non chiederti mai di scrivermi un pezzo di codice :-P
drizzt, chi aveva bisogno di una opinione era l'original poster, non io.
cos'è che non ti piace nel mio pseudocodice?


 cos'è che non ti piace nel mio pseudocodice?
Era una semplice battuta, non volevo certo mettere in discussione le tue
qualita' di programmatore :-)
Semplicemente avevo notato che partendo da un'analisi cosi' semplice avevi
infilato due errori di comprensione dell'analisi e un errore di logica in
quattro righe di pseudocodice, tutto li'. Ma ripeto, non voleva essere un
giudizio o che, solo una semplice battuta. Io e' piu' i bug che scrivo che
non il codice sano :-D

 del testo, cioè semplicemente seguendo le istruzioni assegnate.
Pseudocode:
Input della stringa
Per ogni carattere della stringa
    Del carattere che sto considerando, prendo la posizione all'interno
dell'alfabeto
    Paddo a due cifre.
    Accodo ad una stringa
Cicla
Converto la stringa in un numerico
Divido il numero per 19 e prendo il resto
Output del resto
Risultato per "FR" = 10
Problemi che vedo:
1) Se non ti dicono in che alfabeto (Ita/Eng), non funzionera' mai nemmeno
in pseudocode
2) Convertendola in codice che deve girare, devi fare attenzione alle
maiuscole/minuscole senno' vien fuori del casino.
Altri problemi non ne vedo :-)

 della divisione intera per 19. Trovare il codice hash di "FR"
1^ pos.=a="F"=(asc("F")-64)=06 o "06"
2^ pos.=b="R"=(asc("R")-64)=18 o "18"
3^ pos.=c=""= se valore=0 se stringa=""
soluzione 1:
valore=sommatoria di ciascun valore delle lettere per il peso determinato
dalla posizione
due casi
caso a
valore= a*10^0+b*10^2+c*10^4
valore=1806
codice=valore mod 19=1
caso b
valore= a*10^4+b*10^2+c*10^0
valore=61800
codice=valore mod 19=12
soluzione 2:
valore=concatenamento di stringhe convertite poi in numerico
valore=clng("0618")=618
codice=valore mod 19=10
per me il piu' logico e' quello della soluzione 1 caso a, in ogni caso
mancano elementi per stabilire la corretta soluzione
beppe

 programmatori (esperti e non).
[cut]
Chiedo scusa, sono stato poco chiaro per quanto riguarda la soluzione
:) quello che volevo non era la soluzione a livello di codice o
pseudocodice, in quanto mi sembra comunque abbastanza semplice, ma è
proprio a livello di "comprensione" il problema. Fermo restando che la
consegna non è esauriente, quindi eventuali domande in più non
avrebbero risposta, volevo sapere voi come sviluppate il codice
corrispondente alla sigla, ovvero se ITA è 092001 (I = 09, T = 20, A =
01), come traducete voi FR? La diatriba è nata appunto sul fatto di
aggiungere 2 zeri o meno alla fine, quindi:
FR = 0618 oppure FR = 061800 ? Ripeto, ragionate si da programmatori,
ma con un occhio "all'italiano" del testo della consegna, ovvero tra
le 2 cose quale sembra chiedervi il testo? Vi ringrazio ancora, ho
mandato pure un' e-mail a un professore universitario molto conosciuto
per avere una risposta :) Grazie ancora!

> FR = 0618 oppure FR = 061800 ?
La prima che hai detto: FR = 0618, e questo perchè nella traccia c'è 
scritto che ogni sigla possiede AL MASSIMO 3 caratteri.
Però effettivamente non dice nulla riguardo la lunghezza finale del 
numero da ottenere (se deve essere semplicemente grande quanto il doppio 
dei caratteri della sigla o fisso a 6 cifre).
_IO_ (e sottolineo _IO_) sceglierei 0618, nella traccia non c'è scritto 
nulla a riguardo e, salvo esplicite domande alla prof, sono libero di 
fare come mi pare.
Se invece ci fosse stato un esempio nella traccia di due sigle di 
lunghezza diversa allora avrei avuto la strada un po' più spianata... ma 
in questo caso non c'è scritto nulla. E la prof non deve smazzare i 
maroni :)
-- 
Rivolterò il mondo per trovarlo, e anche se andasse in Indocina uno dei 
nostri starà nascosto in una ciotola di riso pronto a sparargli nel culo.
(Pulp Fiction)

 le 2 cose quale sembra chiedervi il testo?
Io continuo a non capire dove sia il dubbio.
"Data la sigla di una nazione (al massimo 3 lettere), si converte ogni
lettera in un numero di 2 cifre (corrispondente alla sua posizione
nell'alfabeto). Il codice hash della sigla è il resto della divisione intera
per 19. Trovare il codice hash di "FR""
Mi dici come si puo' arrivare a trovare, nel testo di cui sopra,
l'indicazione che la stringa deve essere paddata su tre lettere?

della divisione intera per 19. Trovare il codice hash di "FR"
la domanda e' di trovare il codice hash, quindi la risultante
dell'algoritmo, lasciando liberi di scegliere la modalita' di composizione
dello stesso.
che non fosse stato gia' definito precedentemente l'algoritmo lo si suppone
dal fatto che sia nata una diatriba, di conseguenza se si stabilisce di fare
un concatenamento del valore di ciascuna lettera della sigla,  escludendo
qualsiasi carattere che non sia alfabetico (lo si deduce da "corrispondente
alla sua posizione nell'alfabeto) e quindi lo spazio ed il null, o in
alternativa di dare una valore posizionale in base alla lunghezza EFFETTIVA
della sigla, la risultante sara' 618 cioe' o val( "06" & "18" ) o
6*10^2+6*10^0 , che e' corretto tanto quanto se si stabilisce di dare un
valore posizionale in base alla lunghezza MASSIMA che puo' assumere la sigla
e quindi su base 10^(lunghezza_massima_sigla-posizione_carattere)*2 da cui
si avrebbe quindi come risultante 61800.
il quesito cosě come l'hai proposto (o ti e' stato proposto) equivale al
bicchiere riempito a meta' di cui si vuole sapere se e' mezzo vuoto o mezzo
pieno ...
e la tua risposta e' sempre quella errata!!!
comunque auguri, direi che ne hai bisogno ;)
beppe

 
Ecco, è li che insiste la prof, secondo lei doveva essere paddata su tre 
lettere ovvero FR_, quindi 061800 O__o peccato che nel testo 
l'indicazione non ci sia! Cmq le ho fatto leggere le vostre risposte e 
anche l'e-mail di risposta di un prof universitario moooolto conosciuto 
e alla fine ha dovuto ammettere di aver sbagliato lei!

 beppe
Beh, alla fine č andata bene, quello a cui volevo arrivare io non era la 
ragione assoluta (ovvero 618 č giusto e tutto il resto č sbagliato) ma 
analizzare se il problema diceva esplicitamente che la stringa doveva 
essere 61800 (cosa che cosě non č, perň ho preferito chiedere conferma 
qui). Quindi, essendo poco preciso il testo, le risposte sono 
accettabili entrambe...ma la professoressa continuava a dire che 618 era 
sbagliato e basta! Poi leggendo voi si č ricreduta :) ringrazio ancora 
tutti x le risposte! Ciaoooo