Witam
Mam taki problem, że:
W pliku mam zapisane imiona, jedno pod drugim. Tylko żeby było ciekawiej między imionami są znaki minus i są pisane różnymi literami np.:
J--A-n
al---a
to-Me-k
I teraz muszę policzyć ile jednakowych imion jest na liście. Poradziłem sobie z pozbyciem się znaków minus i zamieniłem wszystkie znaki na duże litery, teraz trzeba tylko pewnie jakiś warunek napisać, ale za cholerę mi to nie wychodzi. Stworzyłem coś takiego w Virtual Pascalu (poniżej) troszkę tam strasznie namieszane jest, może ma ktoś pomysł na prostrze tego rozwiązanie, bardzo bym prosił o jakies przykłady. Pozdrawiam:
program shit_ver_robocza_0_0_0_0_0_1;
uses crt;
type wskaznik_listy1 = ^skladnik_listy1;
skladnik_listy1 = record
dane :string[20];
wskaznik: wskaznik_listy1;
end;
var pierwszy_skladnik, skladnik_biezacy: wskaznik_listy1;
dane,x :string;
dana0 : string;
znak:char;
plik:text;
i,j,k,p,d,a:integer;
procedure dolisty1 (var element :string;
var skladnik_biezacy: wskaznik_listy1);
var poprzedni_skladnik, nastepny_skladnik: wskaznik_listy1;
begin
if skladnik_biezacy<>nil
then begin
poprzedni_skladnik:=skladnik_biezacy;
nastepny_skladnik:=skladnik_biezacy^.wskaznik
end
else begin
poprzedni_skladnik:=nil;
nastepny_skladnik:=nil
end;
new(skladnik_biezacy);
with skladnik_biezacy^ do
begin
dane:=element;
wskaznik:=nastepny_skladnik
end;
if poprzedni_skladnik<>nil
then poprzedni_skladnik^.wskaznik:=skladnik_biezacy
end;
procedure zlisty1 (var element : string;
var pierwszy_skladnik, skladnik_biezacy:wskaznik_listy1);
var poprzedni_skladnik, nastepny_skladnik: wskaznik_listy1;
begin
if (pierwszy_skladnik<>nil) and (skladnik_biezacy<>nil)
then if pierwszy_skladnik<>skladnik_biezacy
then begin
poprzedni_skladnik:=pierwszy_skladnik;
nastepny_skladnik:=poprzedni_skladnik^.wskaznik;
if nastepny_skladnik<>skladnik_biezacy
then repeat
poprzedni_skladnik:=nastepny_skladnik;
nastepny_skladnik:=poprzedni_skladnik^.wskaznik
until nastepny_skladnik=skladnik_biezacy;
with skladnik_biezacy^ do
begin
element:=dane;
poprzedni_skladnik^.wskaznik:=wskaznik
end;
dispose(skladnik_biezacy);
skladnik_biezacy:=poprzedni_skladnik
end
else begin
with pierwszy_skladnik^ do
begin
element:=dane;
pierwszy_skladnik:=wskaznik
end;
dispose(skladnik_biezacy);
skladnik_biezacy:=pierwszy_skladnik
end
end;
begin
{clrscr;}
skladnik_biezacy:=nil;
j:=0;
assign(plik,'c:/Freepascal/imiona.txt');
reset(plik);
while not eoln(plik) do
begin
read(plik,j);
end;
writeln(j);
j:=0;
while not seekeof(plik) do
begin
j:=j+1;
while not seekeoln(plik) do
begin
read(plik,znak);
if znak<>'-' then
dane:=dane+upcase(znak);
end;
{ write(dane);}
dolisty1 (dane,skladnik_biezacy);
if i=1 then pierwszy_skladnik:=skladnik_biezacy;
dane:='';
end;
j:=j;
writeln('Ilosc wszystkich imion na liscie: ', j);
write(skladnik_biezacy^.dane);
readln;
end.