Aiuto programma pascal
Non riesco a sviluppare un algoritmo per risolvere questo problema in pascal: Dato un array di caratteri, si scriva una funzione che ricevendo in ingresso l’array e il numero di caratteri contenuti restituisca il carattere che più frequentemente degli altri è seguito dal carattere successivo nell’ordine alfabetico. es: A B L M P A S T L M A A => L (per due volte è seguito dal carattere M)
Risposte
Ciao Tommaso3097, ben iscritto. ;)
Preliminarmente tieni ben presente che in Pascal si ha numero := ord(carattere), dove la funzione
ord ricevendo in ingresso un carattere qualsiasi restituisce in output il relativo numero intero decimale della Codifica ASCII. Per semplificarci la vita assumiamo che i caratteri in ingresso siano tutti maiuscoli (come nell'esempio della consegna).
Ciò detto, l'idea è quella di generare innanzitutto un vettore app di lunghezza
A questo punto, il cuore dell'algoritmo consiste nello scorrere l'array v in ingresso confrontando a
due a due i relativi numeri in codice ASCII di ogni carattere e del proprio successivo: nel caso in cui
Siamo praticamente al traguardo. Non rimane che scorrere un'ultima volta il vettore app per determinare la ricorrenza massima in posizione i-esima, porre
video il carattere richiesto dall'esercizio:
la funzione inversa di ord).
Dai, ora prova ad unire tutti i tasselli scrivendo un bel programmino in Pascal. ;)
Preliminarmente tieni ben presente che in Pascal si ha numero := ord(carattere), dove la funzione
ord ricevendo in ingresso un carattere qualsiasi restituisce in output il relativo numero intero decimale della Codifica ASCII. Per semplificarci la vita assumiamo che i caratteri in ingresso siano tutti maiuscoli (come nell'esempio della consegna).
Ciò detto, l'idea è quella di generare innanzitutto un vettore app di lunghezza
[math]\small ord(Z)-ord(A)+1[/math]
con tutte le entrate inizializzate a zero, in cui si andrà a memorizzare per ogni lettera il numero di volte che è seguita della sua successiva. A questo punto, il cuore dell'algoritmo consiste nello scorrere l'array v in ingresso confrontando a
due a due i relativi numeri in codice ASCII di ogni carattere e del proprio successivo: nel caso in cui
[math]v[ i+1 ] = v[ i ]+1[/math]
allora [math]app[ v[ i ] - ord(A) ]:=app[ v[ i ] - ord(A) ] + 1[/math]
. A te lo sforzo di capire il perché di tale codice (capito questo il resto è banale, più o meno).Siamo praticamente al traguardo. Non rimane che scorrere un'ultima volta il vettore app per determinare la ricorrenza massima in posizione i-esima, porre
[math]max=i[/math]
e stampare a video il carattere richiesto dall'esercizio:
[math]chr\left(max+ord(A)\right)[/math]
(chr è essenzialmente la funzione inversa di ord).
Dai, ora prova ad unire tutti i tasselli scrivendo un bel programmino in Pascal. ;)
Questa discussione è stata chiusa