Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 20:45   #1
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию Задача Pascal на динамические структуры данных

Добрый день. Помогите, пожалуйста, решить задачу.

Цитата:
Проводится мониторинг людей,которые ответить на m вопросов, в качестве ответов давая оценку от 0 до 5.

Программа берёт информацию из текстового файла, в котором в первой строчке указано число респондентов, во второй - оценка первого респондента,в третьей строчке - оценка 2 респондента, в четвёртой строчке - 3-го и т.д.

Просчитать средний арифметический ответ по каждому вопросу.
Я составил такой план действий:
1. чтение количества человек;
2. выделение под матрицу память;
3. инициализируем матрицу (берём инфо из файла);
4. подсчитываем среднее арифметическое по каждому вопросу;
5. распечатываем (выводим на экран) матрицу и средние арифметические по каждому вопросу;
6. освобождаем память.

Т.е. нужно написать процедуры, условно называемые getmemory, init (инициализация), work (подсчёт), print, freemem.

Искренне надеюсь на помощь.
Citromon вне форума Ответить с цитированием
Старый 08.04.2012, 20:58   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Код:
uses
  CRT;

var
  a: array of word;
  n, m, i, j, b: integer;
  f: text;

begin
  assign(f, 'in.txt');
  reset(f);
  readln(f, n, m);
  setlength(a, m);
  for i := 0 to m - 1 do
    a[i] := 0;
  for i := 1 to n do
    for j := 0 to m-1 do
    begin
      readln(f, b);
      a[j] := a[j] + b;
    end;
  for i := 0 to m - 1 do
    writeln(i + 1, ' question: ', a[i] / m:3:3);
  close(f);
  readln;
end.
n людей отвечают на m вопросов (сначала m ответов первого человека и т.д.).
входной файл вида:
Цитата:
3 4
1
2
3
4
0
0
0
0
5
5
5
5
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.04.2012, 21:39   #3
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию

Спасибо, BDA.

Может, кто-нибудь знает, как решить задачу используя динамические структуры данных?
Citromon вне форума Ответить с цитированием
Старый 08.04.2012, 21:47   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Citromon, a: array of word (свободный массив) является динамической структурой данных (как мне кажется).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.04.2012, 02:03   #5
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию

BDA, скажите, пожалуйста, что такое свободный массив?
Дело в том, что мой препод говорил написать прогу по изложенному мною в первом посте плану, и нужно написать несколько процедур и вызывать их в ходе программы.
Как это сделать, ума не приложу.
Citromon вне форума Ответить с цитированием
Старый 09.04.2012, 02:55   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Свободный - динамический (длина задается во время выполнения).
В код выше закралась ошибка.
Код:
writeln(i + 1, ' question: ', a[i] / m:3:3);//должно быть n
Переписал с использованием getmem, freemem.
Код:
Uses CRT;
type
  arr=array[1..1] of byte;
  table=^arr;

var
  n, m, i, j,s: integer;
  b:byte;
  t:table;
  f: text;

begin
  assign(f, 'in.txt');
  reset(f);
  readln(f, n, m);
  getmem(t,n*m*sizeof(arr));
  for i := 0 to n-1 do
    for j := 0 to m-1 do
      readln(f, t^[i*n+j]);
  for j := 0 to m - 1 do
  begin
    write(j + 1, ' question:');
    s:=0;
    for i := 0 to n - 1 do
    begin
      write(t^[i*n+j]:2);
      s:=s+t^[i*n+j];
    end;
    writeln('   Average: ',s/n:3:3);
  end;
  close(f);
  freemem(t,n*m*sizeof(arr));
  readln;
end.
Даже не знаю, как разбивать на процедуры. Код сильно разрастется и засорится лишними действиями (сейчас одновременно происходят распечатывание и подсчет).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.04.2012 в 02:57.
BDA вне форума Ответить с цитированием
Старый 09.04.2012, 09:12   #7
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию

Огромное спасибо!
Citromon вне форума Ответить с цитированием
Старый 09.04.2012, 11:49   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от BDA
Citromon, a: array of word (свободный массив) является динамической структурой данных (как мне кажется).
BTW, uses CRT и SetLength() в одной программе немножко диссонируют - в TurboPascal не было динамических массивов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2012, 02:59   #9
Citromon
 
Аватар для Citromon
 
Регистрация: 17.02.2012
Сообщений: 7
По умолчанию

Вот никак не могу понять, почему первая программа компилируется в PascalABC.net, а вторая - нет?

В Borland Pascal наоборот, компилируется вторая, а первая - нет. В TP в первом варианте указывает на ошибку при описании массива array of word, а в PascalABC.net пишет, что незнает что такое getmem.
Citromon вне форума Ответить с цитированием
Старый 16.04.2012, 03:07   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Борланд Паскаль не поддерживает динамические массивы (как уже заявил выше Serge_Bliznykov), а Паскаль ABC.net поддерживает. Насчет getmem в ABC.net не знаю
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры данных - работа со списками (Pascal) RakNaGore Помощь студентам 0 13.02.2012 18:57
динамические структуры данных pascal [VENOM] Помощь студентам 0 25.05.2011 20:31
задача по теме Динамические структуры данных в Паскале Klik_1602 Помощь студентам 0 04.01.2011 00:58