Tommaso3097
Tommaso3097 - Ominide - 2 Punti
Rispondi Cita Salva
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)
TeM
TeM - Eliminato - 23454 Punti
Rispondi Cita Salva
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
[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. ;)
Questo topic è bloccato, non sono ammesse altre risposte.
Come guadagno Punti nel Forum? Leggi la guida completa
In evidenza
Classifica Mensile
Vincitori di novembre
Vincitori di novembre

Come partecipare? | Classifica Community

Community Live

Partecipa alla Community e scala la classifica

Vai al Forum | Invia appunti | Vai alla classifica

sbardy

sbardy Admin 22784 Punti

VIP
Registrati via email