Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Переделать программу на Си (http://forum.oszone.net/showthread.php?t=259836)

S*2012* 02-05-2013 20:17 2143420

Переделать программу на Си
 
Всем доброго времени суток!
Помогите, пожалуйста, переделать программу на язык Си или подскажите хотя бы, какие функции использовать, очень надо. Сам я пробовал, но у меня что-то на получается (особенно, где происходит копирование строк). Программирую на 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.


lxa85 02-05-2013 21:16 2143461

S*2012*, уточните пожалуйста С или С++ ? Вопрос существенный, т.к. в С++ есть инструменты для работы со строками. В простом С AFAIK их нет и приходится строить достаточно сложные конструкции.
В любом случае приведите ваши собственные попытки.
Что то я код читаю, смысла понять не могу. Он что вообще делать то должен?
Цитата:

Цитата S*2012*
Код:

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;

»

Это в частности. Это вообще что-то странное и дикое по моему. Могу ошибаться. Нужны комментарии.

S*2012* 02-05-2013 21:28 2143467

Писать нужно на Си.

На вход программе в первой строке подаётся аббревиатура – строка из заглавных латинских букв, состоящая не менее чем из двух и не больше чем из пяти букв. Во второй строке находится число N – количество названий, не все из них точно подходят под указанную аббревиатуру. Программа должна вывести список из трёх фирм с нужной аббревиатурой, которые упоминаются чаще всего.

Пример входных данных:
MS
5
MOUNTING SYSTEM
MACRO SOFT COMPANY
MONTANA JEANS
MOUNTING SYSTEM
MACRO SOFT
Пример выходных данных для приведенного выше примера входных данных:
MOUNTING SYSTEM
MACRO SOFT

Я зациклился на функциях gets и strcat, когда пытался переделать. Вот фрагмент:
Код:

int main(void)
{
        int n, Num, Num3, i, j, t;
        int count[9];
        char *a, *b, *c, *s;
        char names[9];

        gets(a);
        Num = 0;
        scanf("%d", &n);

        for (i = 1; i < 10; i++)
        {
                gets(s);
                strcat(b, s);
        }
       
}


S*2012* 02-05-2013 21:44 2143476

Вопрос не по теме: во много ли раз проще работать си строками в Visual Basic, нежели в Си?

lxa85 02-05-2013 22:31 2143494

S*2012*,
Цитата:

Цитата S*2012*
Вопрос не по теме: во много ли раз проще работать си строками в Visual Basic, нежели в Си? »

Строки в Visual Basic
Основы работы со строками Visual Basic
Строки в С и С++(часть 1)
Как я понял из задания, надо отсортировать предложенный массив, и вывести наиболее часто употребляемые значения. Мне сейчас сделать это несколько затруднительно. Разбейте задачу на составляющие и попробуйте поискать готовые фрагментарные решения. Ввод данных / сортировка.
Сортировка массива строк Си может поможет (тема форумная, стартовый код не верен). :dont-know


Время: 06:52.

Время: 06:52.
© OSzone.net 2001-