Soglasniški podnizi

Soglasniški podnizi

Avtor: matic Pogladič

Soglasniški podnizi

Besedilo naloge

1. Soglasniški podnizi Na standardnem vhodu imamo zapisane besede, vsako v svoji vrstici. V njih nastopajo le male crke angleške abecede, nobene številke ali locila ni. Nobena beseda ni daljša od 100 znakov. Zanima nas beseda, v kateri se nahaja najdaljši strnjeni podniz soglasnikov. Za soglasnike štejemo vse crke, ki niso samoglasniki (a, e, i, o, u). Tule je nekaj primerov besed, poleg vsake besede smo zapisali iskano dolžino, podzaporedje pa zapisali v krepkem tisku:

in 1

pristno 3

toreador 1

strjenka 4

a 0

skrbstvo 7

besedna 2

krt 3

Napiši program, ki bo prebral zaporedje besed s standardnega vhoda in nato izpisal na standardni izhod besedo, ki je vsebovala najdaljši strnjeni podniz soglasnikov. V zgornjem primeru bi torej izpisal besedo „skrbstvo“. Ce je vec besed z enako najvecjo dolžino podniza, je vseeno, katero od njih bo tvoj program izpisal. Obdela naj vse besede do konca standardnega vhoda (eof).

Reševanje

(Soglasniski1.JPG)

Definiramo funkcijoz enim parametrom imeDat, ki vsebuje pot do datoteke v kateri so zapisane besede(npr. imeDat='C:
test.txt'). Z funkcijo open odpremo datoteko iz z funkcijo ukazom s = f.readlines() ustvarimo seznam s, ki ima kot elemente nize vsake vrstice iz datoteke. V našem primeru besede, saj je v vsaki vrsti po ena beseda. Ustvarimo dva prazna seznama sez in sez1. Seznam sez je namenjen seznamu vseh besed iz datoteke brez \n dodatka, ki ga odstranimo z for zanko, ki za vsak element izvede funkcijo rstrip() in ga pripne seznamu sez.

(Soglasniski.JPG)

Ustvarimo novo funkcijo multiSplit(a), ki sprejme en parameter-niz in ga loči z večimi separatorji. Funkcijo in razlago lahko pridobite na spletni strani.

(Soglasniski2.JPG)

Z for zanko, za vsak element k v sez izvedemo funkcijo multiSplit(k) in ga ločimo s samoglasniki. Ustvarimo prazen seznam 'dolzine' namenjen shranjevanju dolžin ločenih delov vsake besede. Z for zanko, ki teče po ločenih delih k-ja v dolzine pripenjamo dolžine nizov. Ko se zanka konča, v sez1 pripnemo najdaljši niz. Tako v sez1 pridobimo seznam najdaljših dolžin strnjenih nizov samoglasnikov za vsako besedo.

(Soglasniski3.JPG)

Besede v seznamu sez imajo iste indekse kot njihove dolžine v seznamu sez1. Tako v neznanko rez dodamo element, ki ima indeks največjega elementa seznama sez1. Uporabimo ukaz print(), ki izpiše nize na rez-tem mestu v obeh seznamih sez in sez1.

Testni primer izvedemo tako, da v tekstovno datoteko ustrezno zapišemo več vrst besed. Besede z eno črko, tako samoglasnik kot soglasnik. Besede, ki vsebujejo samo samoglasnike ali samo soglasnike itd. Nato zaženemo program, ki sprejme pot te datoteke.

Rešitev

(soglasniski.JPG)
0%
0%