2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Программа на файл, двумерный массив и функцию [Pascal]
Сообщение01.11.2013, 12:01 


18/01/11
78
Здравствуйте!
Возникла проблема с программкой.
Вот задание:
Классный руководитель XI-го класса представил годовые данные об успеваемости учащихся в таблице с n (n < 40) строками, n - количество учащихся, и m (m < 20) столбцами, m - количество школьных предметов. Элемент с индексами i, j содержит среднюю оценку ученика с номером i по предмету с номером j. Оценки являются действительными числами.
Условие: Напишите программу, которая определяет порядковые номера отличников. Напоминаем, что отличник - это ученик, у которого все оценки больше или равны 9. Программа будет содержать в себе подпрограмму, для определения является ли ученик с номером i отличником. Подпрограмма получит в качестве формального параметра индекс строки i и возвратит значение True, если ученик с номером i является отличником и значение False в противном случае.
Ввод: Текстовый файл NOTE.IN содержит на первой строке два целых числа разделённых пробелом - значения n и m. Каждая из следующих n строк будет содержать по m действительных чисел разделённых пробелом. Линия файла с номером i+1 содержит оценки ученика с номером i по m школьным предметам.
Решение будет оцениваться за:
объявления типов данных и переменных; использование текстовых файлов; чтение и запись данных; описание и использование
Пример:
NOTE.IN
4 3
6.00 9.50 9.00
9.50 9.66 10.00
9.75 9.25 9.66
6.50 8.75 7.75
NOTE.OUT
2 3
Вывод: Результаты будут записываться в файле NOTE.OUT, следующим образом: первая строка будет содержать номера отличников, разделённые пробелом, если таких учащихся нет, тогда первая строка строка будет содержать выражение NO RESULT.

Вот моё решение:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program p1;
type mas=array[1..10,1..10]of real;
var f,g: file of real;
    q,w:real;
    i,j,n,m:integer;
    a:mas;
function otl(i:integer):boolean;
var j:integer;
begin
for j:=1 to m do begin
if a[i,j]>=9 then otl:=True else otl:=False;
end;
end;
Begin
assign(f,'C:\PABCWork.NET\note.in.txt');
reset(f);
assign(g,'C:\PABCWork.NET\note.out.txt');
rewrite(g);
read(f,q); read(f,w);
n:=trunc(q); m:=trunc(w);
for i:=1 to n do
for j:=1 to m do begin
read(f,a[i,j]);
end;
for i:=1 to n do begin
if otl(i) then write(g,i);
end;
close(f); close(g);

write(q,' ',w);
writeln;
write(n,' ',m);
writeln;
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;

readln;
End.

Вроде, компилируется без проблем, и в условиях я более менее уровен, но ошибка происходит почему-то в самом начале, при считывании q и w:
1.30454036513397E-76 1.55887769054702E-33

В чём заключается проблема? Где ошибка в коде?

Какое надо добавить условие для вывода "NO RESULT" в файл NOTE.OUT?

Заранее благодарен за ответ!

 Профиль  
                  
 
 Re: Программа на файл, двумерный массив и функцию
Сообщение01.11.2013, 12:47 
Заслуженный участник


11/05/08
32166
Во-первых, Паскаль как таковой понимает имена файлов только в досовском формате (8.3).

Во-вторых, file of real -- отнюдь не текстовой, поэтому бред при чтении совершенно естественен.

Во-третьих, функция "отличник" запрограммирована неверно: там флажок переключается на каждом элементе строки заново, следует же до цикла установить для него некоторое значение, а внутри -- при случае переустанавливать лишь на противоположное стартовому (и, кстати, для приличия немедленно при этом прерывать цикл).

Да, и ещё кстати: приличные люди программ без отступов писать не умеют.

 Профиль  
                  
 
 Re: Программа на файл, двумерный массив и функцию
Сообщение01.11.2013, 12:58 


18/01/11
78
ewert в сообщении #783193 писал(а):
Во-первых, Паскаль как таковой понимает имена файлов только в досовском формате (8.3).

TurboPascal 7.1 прекрасно работает и с .txt и даже без всякого формата (если там будет .in / .out - прочтёт) - проверенно десятком программ из учебника.

Проблему с чтением данных решил, теперь разбираюсь с функцией отличник.

 Профиль  
                  
 
 Re: Программа на файл, двумерный массив и функцию
Сообщение01.11.2013, 13:08 
Заслуженный участник


11/05/08
32166
acme в сообщении #783198 писал(а):
Во-первых, бред. TurboPascal 7.1 прекрасно работает и с .txt и даже без всякого формата (если там будет .in / .out - прочтёт)

Речь не о конкретных расширениях, а о том, что если точка есть, то должна быть не более чем одна.

acme в сообщении #783198 писал(а):
Во-вторых, файлы бывают разного типа,

Вот именно. Я сильно сомневаюсь, что Вы заготовили входной файл в формате именно real -- наверняка он был текстовым (независимо от приписанного ему расширения). Считываете же его как real. Ну и чего же Вы хотите?...

acme в сообщении #783198 писал(а):
В-третьих, считайте меня неприличным.

Ради бога; но если не приучитесь делать отступы -- Вам же боком выйдет, не говоря уж об окружающих.

 Профиль  
                  
 
 Re: Программа на файл, двумерный массив и функцию
Сообщение01.11.2013, 13:09 


18/01/11
78
Прошу прощения за грубость

-- Пт ноя 01, 2013 13:26:18 --

ewert в сообщении #783193 писал(а):
функция "отличник" запрограммирована неверно: там флажок переключается на каждом элементе строки заново, следует же до цикла установить для него некоторое значение, а внутри -- при случае переустанавливать лишь на противоположное стартовому (и, кстати, для приличия немедленно при этом прерывать цикл)

Спасибо за помощь! Всё получилось!

 Профиль  
                  
 
 Re: Программа на файл, двумерный массив и функцию
Сообщение01.11.2013, 23:15 
Заслуженный участник


11/05/08
32166

(Оффтоп)

acme в сообщении #783202 писал(а):
Прошу прощения за грубость

Ничего страшного. Это отчасти я сам спровоцировал некоторой резкостью, но и с Вашей стороны -- ничего страшного.

А что получилось -- то замечательно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group