IDEJA REŠITVE:
Opazimo da je problem simetričen - če iščemo največji padec v drugi datoteki glede na prvo, dobimo isto, kot če iščemo največji vzpon v prvi datoteki glede na drugo. Zato napišemo pomožni program, ki na datotekah prva.txt in druga.txt poišče pesem z navečjim padcem. V funkciji Lestvica samo dvakrat pokličemo ta pomožni program.
RAZLAGA ALGORITMA:
Naprej definiramo pomožno funkcijo, ki vrača niz (ime pesmi) - static string najvecPadec(string prva, string druga)
. Nato definiramo spremenljvki maxPadec in imePesmi, kamur bomo shranjevali vrednost največjega padca in ime pesmi, ki temu padcu ustreza. Ustvarimo tudi spremenljivki, kamur bomo sharanjevali tekoče prebrane vrstici iz obeh datotek. Prvo datoteko odpremo za branje. In jo z while zanko (dokler ni tekoča prebrana vrstica null) beremo po vrsticah. Vsako vrstico, ki jo preberemo, razbijemo na dele (ime in popularnost) z ukazom Split - string[] besede1 = vrstica_prve.Split(';')
. Znotraj te zanke ustvarimo spremenljivko jeVDrugi, ki je tipa bool in je namenjenatemu daza posamezno vrstico prve datoteke ugotavljamo, če je tudi v drugi.
V zunanji while zanki odpremo tudi drugo datoteko za branje in jo beremo po vrsticah v notranji while zanki. Tudi vrstice druge datoteke razbijemo na dele z ukazom Split. Znatraj notranje while zanke poiščemo tako vrstico druge datoteke, v kateri se ime pesmi ujema z imenom pesmi v tekoči vrstici prve datoteke - if (besede1[0] == besede2[0])
. Ko tako vrstico najdemo, spremenljivko jeVDrugi takoj nastavimo na true. Nato pa preverimo če je razlika vrednosti popularnosti v prvi in drugi datoteki večja od trenutne vrednosti spremenljivke maxPadec. Če to velja, to razliko vrednosti shranimo v spremenljivko maxPadec, ime tekoče pesmi pa v spremenljivko imePesmi.
Ko pridemo ven iz notranje while zanke, drugo datoteko zapremo. Nato se pa vprašamo, če je tekoča pesem iz prve datoteke nastopala v drugi. Če je vrednost spremenljivke jeVDrugi false, tekoča pesem nastopa samo v prvi datoteki, torej je njen padec enak kar njeni popularnosti v prvi datoteki. Preverimo, če je ta vrednost večja od trenutne vrednosti spremenljivke maxPadec. Če to velja, to razliko vrednosti shranimo v spremenljivko maxPadec, ime tekoče pesmi pa v spremenljivko imePesmi.
Ko pridemo ven iz zunanje while zanke, zapremo prvo datoteko in vrnemo spremenljivko imePesmi.
Napišemo še funkcijo Lestvica, ki vrne tabelo iz dveh nizov - prvi niz je ime pesmi, ki je doživela največji padec, drugi pa ime pesmi, ki je doživela največji vzpon.
Da dobimo največji padec, pokličemo funkcijo najvecPadec za datoteki "prva.txt" in "druga.txt". Da dobimo največji vzpon pa za datoteki "druga.txt" in "prva.txt".