Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal]Помогите найти ошибку в коде 
:(
    Опции темы
Loginanton
  Дата 8.10.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



Программа должна выводить в выходной файл список вида: профессия - количество человек. Помогите пожалуйста найти ошибку в коде, а то почему то программа программистов игнорирует smile Всё в прикреплённом файле.
Заранее спасибо

Это сообщение отредактировал(а) Loginanton - 8.10.2008, 23:57

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  PRAX.zip 6,24 Kb
PM   Вверх
SneG0K
Дата 9.10.2008, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Мммм... Что значит не ищет? У меня всех показывает. Программистов там аж три штуки=)
Вот только файл не в стандартной кодировке smile 
PM WWW Skype   Вверх
orthrus
Дата 9.10.2008, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 5
Всего: 16



У тебя ошибка в цикле сортировки:
Код

for j := 1 to 10 do
 for i := 1 to 10 do  { цикл не должен быть до 10, иначе }
    if b[i] > b[i + 1] then {в этой строке получишь ошибку выхода за пределы массива}
       begin
         x := b[i];
         b[i] := b[i + 1];
         b[i + 1] := x;
       end;

Вот переделка твоей программы, только без сортировки:
Код

program prax;
const
     AMOUNT = 10;
{обьявляем переменные}
var
     a , c : text;
     i , j , n, m : byte;
     b : array[1..AMOUNT] of string;
     tmp: array[1..AMOUNT] of string;
     x : string;

begin
{открываем файл на чтение}
  assign(a, 'in.txt');
  reset(a);
{читаем строки из файла в массив}
  for i := 1 to AMOUNT do
  readln(a, b[i]);
  close(a);
{оставляем в массиве только названия профессий}
  for i := 1 to AMOUNT do
  b[i] := copy(b[i], 16, 15);
{удаляем нижние подчёркивания из строк}
  for i := 1 to AMOUNT do
      begin
        j := 1;
        while b[i, j] <> '_' do
        j := j + 1;
        b[i] := copy(b[i], 1, j - 1);
      end;
{считаем сколько каких профессий и записываем результат в файл}
  assign(c, 'out.txt');
  j := 1;
  for i:=1 to AMOUNT do
      begin
        m := 0;
        for n:=1 to j do
            if (tmp[n] <> b[i]) then inc(m)
            else begin
                   m := 0;
                   break;
                 end;
        if (m = n) then
           begin
             tmp[j] := b[i];
             inc(j);
             m := 0;
             for n := i to AMOUNT do
                 if (b[i] = b[n]) then inc(m);
             append(c);
             writeln(c, b[i], ' - ', m, 'шт');
           end;
      end;
  close(c);
  for i := 1 to j do
  writeln(tmp[i]);
  readln;
{закрываем входной файл}
{конец мученьям}
end.




--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
Loginanton
Дата 9.10.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



orthrus, спасибо, работает smile  Единственное, что было бы классно если бы обьяснил как участок кода, тот что считает количества профессий, работает. Меня интересует сам алгоритм.

А вообще за помощь обоим спасибо огромное smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.