S*2012*
02-05-2013, 20:17
Всем доброго времени суток!
Помогите, пожалуйста, переделать программу на язык Си или подскажите хотя бы, какие функции использовать, очень надо. Сам я пробовал, но у меня что-то на получается (особенно, где происходит копирование строк). Программирую на Visual C++ 2008. Заранее спасибо.
Вот, собственно, и программа:
var n, Num, Num3, i, j, t: integer;
Count: array[1..10] of integer;
a, b, c, s: string;
Names: array[1..10] of string;
begin
readln(a); {Считываем аббревиатуру}
Num:=0; {Число различных фирм}
ReadLn(N); {Считываем количество фирм}
for i:=1 to N do
begin
ReadLn(s); {считали название фирмы}
b:=s[1];
c:=s;
while (pos(' ',c)>0) and (length(b)<= length(a)) do
{составляем аббревиатуру из названия}
begin
b:=b+c[pos(' ',c)+1];
delete(c,pos(' ',c),1)
end;
if a = b then
begin
{Осуществляем поиск названия в списке уже встретившихся}
j:=1;
while (j<=Num) and (s<>Names[j]) do j:=j+1;
{Если фирма найдена}
if j<=Num then {Увеличиваем счетчик числа повторений}
Count[j]:=Count[j]+1
else begin {Иначе добавляем фирму в конец списка}
Names[j]:=s;
Count[j]:=1;
Num:=Num+1
end
end
end;
{Сортируем массивы Names и Count в порядке убывания значений массива Count}
for i:=Num downto 2 do
for j:=2 to i do if Count[j-1]<Count[j] then
begin
t:=Count[j]; Count[j]:=Count[j-1]; Count[j-1]:=t;
s:=Names[j]; Names[j]:=Names[j-1]; Names[j-1]:=s;
end;
if Num < 3 then Num3:=Num else Num3 := 3;
for i:=1 to Num do
if Count[i] >= Count[Num3] then
writeln(Names[i]);
end.
Помогите, пожалуйста, переделать программу на язык Си или подскажите хотя бы, какие функции использовать, очень надо. Сам я пробовал, но у меня что-то на получается (особенно, где происходит копирование строк). Программирую на Visual C++ 2008. Заранее спасибо.
Вот, собственно, и программа:
var n, Num, Num3, i, j, t: integer;
Count: array[1..10] of integer;
a, b, c, s: string;
Names: array[1..10] of string;
begin
readln(a); {Считываем аббревиатуру}
Num:=0; {Число различных фирм}
ReadLn(N); {Считываем количество фирм}
for i:=1 to N do
begin
ReadLn(s); {считали название фирмы}
b:=s[1];
c:=s;
while (pos(' ',c)>0) and (length(b)<= length(a)) do
{составляем аббревиатуру из названия}
begin
b:=b+c[pos(' ',c)+1];
delete(c,pos(' ',c),1)
end;
if a = b then
begin
{Осуществляем поиск названия в списке уже встретившихся}
j:=1;
while (j<=Num) and (s<>Names[j]) do j:=j+1;
{Если фирма найдена}
if j<=Num then {Увеличиваем счетчик числа повторений}
Count[j]:=Count[j]+1
else begin {Иначе добавляем фирму в конец списка}
Names[j]:=s;
Count[j]:=1;
Num:=Num+1
end
end
end;
{Сортируем массивы Names и Count в порядке убывания значений массива Count}
for i:=Num downto 2 do
for j:=2 to i do if Count[j-1]<Count[j] then
begin
t:=Count[j]; Count[j]:=Count[j-1]; Count[j-1]:=t;
s:=Names[j]; Names[j]:=Names[j-1]; Names[j-1]:=s;
end;
if Num < 3 then Num3:=Num else Num3 := 3;
for i:=1 to Num do
if Count[i] >= Count[Num3] then
writeln(Names[i]);
end.