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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 15:23   #1
Архивариус
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию Работа с записями, вычисление значения выражения. (Pascal)

Добрый день, форумчане. Программа при компиляции выдает ошибку ввода/вывода (неверный числовой формат при вводе /19строка/), все числа целого типа, кроме результатов вычисления средних показателей.

Код:
program lab7;
uses crt;
const
 n=7;
Type st=record
  fam:string[10];
  b1,b2,b3,b4,b5:2..5;
  sb:real;
end;
mas=array[1..n] of st;
Procedure read_file(var f:text; var m:mas);
 var
 i:integer;
 begin
  for i:=1 to n do
   begin
    m[i].sb:=0;
    read(f, m[i].fam);
    read(f, m[i].b1);
    read(f, m[i].b2);
    read(f, m[i].b3);
    read(f, m[i].b4);
    readln(f, m[i].b5);
    m[i].sb:=m[i].b1+m[i].b2+m[i].b3+m[i].b4+m[i].b5;
    m[i].sb:=m[i].sb/5;
   end;
 end;
Procedure sb_g(m:mas; var sbg:real);
 var
 i:integer;
 begin
  sbg:=0;
  for i:=1 to n do
 sbg:=sbg+m[i].sb;
  sbg:=sbg/n;
 end;
Procedure second(m:mas; var k:integer);
 var
 i:integer;
 begin
  k:=0;
  for i:=1 to n do
  if m[i].b2=5 then
  k:=k+1;
 end;
Var
 f:text;
 ved:mas;
 sb_gr:real;
 k,i:integer;
begin
clrscr;
assign(f, 'inpgr.txt');
reset(f);
read_file(f, ved);
for i:=1 to n do
 begin
 write(ved[i].fam:10);
 write(ved[i].b1:3);
 write(ved[i].b2:3);
 write(ved[i].b3:3);
 write(ved[i].b4:3);
 write(ved[i].b5:3);
 writeln(ved[i].sb:5:2);
 end;
sb_g(ved,sb_gr);
writeln(' Sredniy ball:' , sb_gr:6:2);
second(ved, k);
writeln('Kol-vo 5 po 2-mu predmetu=' , k);
close(f);
readkey;
end.
Заранее большое спасибо.

Последний раз редактировалось Архивариус; 08.12.2012 в 19:42.
Архивариус вне форума Ответить с цитированием
Старый 08.12.2012, 18:04   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Какие входные данные?
Может быть вы выходите за диапазон вашего интервального типа.
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 19:39   #3
Архивариус
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

Нет, за пределы диапазона я не выходил, т.к. по заданию нужно вычислить средний балл каждого студента и всей группы.
Архивариус вне форума Ответить с цитированием
Старый 08.12.2012, 19:46   #4
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Так какие входные данные?
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 20:23   #5
Архивариус
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

Входные данные из текстового файла

Код:
Gaftonyuk  2 2 2 2 2
Gorochenko 4 5 3 4 5
Gricenko   4 3 3 4 5
Kozar      3 4 4 3 2
Severin    4 4 5 4 3
Udalcov    5 5 4 4 5
Yarmak     5 5 5 4 4
Мне главное узнать хотя бы где эту ошибку я допустил и в чем она заключается.

Последний раз редактировалось Архивариус; 08.12.2012 в 20:27.
Архивариус вне форума Ответить с цитированием
Старый 08.12.2012, 20:33   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Естественно, ошибка, у Вас же файл текстовый

Код:
var f:text
А работаете Вы с типом record

Либо делайте file of record, либо считывайте всю строку и разбирайте по переменным с соответствующим преобразованием типов.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 08.12.2012, 20:38   #7
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Действительно, что-то углядел, файл то текстовый...
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 20:45   #8
Архивариус
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Естественно, ошибка, у Вас же файл текстовый

Код:
var f:text
А работаете Вы с типом record

Либо делайте file of record, либо считывайте всю строку и разбирайте по переменным с соответствующим преобразованием типов.
Вот том вся и проблема, что именно такой текст программы давал преподаватель на практическом занятии. В нем я изменил только одну процедуру, чтоб соответствовала условиям моего задания, а первые две общие (для всей группы).
Архивариус вне форума Ответить с цитированием
Старый 08.12.2012, 20:47   #9
Архивариус
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

Если возможно, то подскажите, где именно нужно изменить.
Архивариус вне форума Ответить с цитированием
Старый 08.12.2012, 21:18   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

В процедуре:

Код:
Procedure read_file(var f:file of st; var m:mas);
и в самой программе:

Код:
Var
 f:file of st;
 ved:mas;
 sb_gr:real;
 k,i:integer;
Ну и добавить процедуру ввода всех этих данных в файл

Код:
Procedure write_file(f:file of st; var m:mas);
Текст тот же, что для чтения, но пишете
Код:
ReadLn(элемент_массива);
Write(F,элемент_массива);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление значения выражения! MrAlexandr C++ Builder 6 18.11.2012 20:48
Вычисление значения выражения Pascal kvkvk Помощь студентам 5 10.10.2012 23:28
Работа с записями. Pascal passatv6 Помощь студентам 1 16.04.2012 21:24
Работа с записями в Pascal vinniepooh Помощь студентам 3 11.04.2010 22:53
Работа с записями (pascal) Siroga35 Помощь студентам 2 17.03.2009 18:58