2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 20:15 
Проверьте, пожалуйста, программу. Условие задачи: составьте программу подсчета таких строк двухмерного массива, что суммы элементов этих строк положительны. Язык паскаль.
У меня не работает паскаль, поэтому я не могу проверить, работает она или нет.
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program z7;
type mas = array [1..50,1..50] real;
var a: mas1;
con, М: real;
procedure input (k: byte; var c: mas1);
var i, j: byte;
begin
    for i: = 1 to k do
   for j: = 1 to k do
begin
     write( '[', i, '', j '] =');
ReadLn (с [I, J]);
end;
end;
procedure print (k: byte; c: mas1);
var i, j: byte;
begin
    for i: = 1 to k do
 begin
     for j: = 1 to k do
  write(с [I, J]: 7: 2);
WriteLn;
end;
end;
procedure count (k: byte; c: mas1, var s, m: real);
var i, j: byte;
begin
    s: = 0;
for i: = 1 to k do
    if c [i, j]> 0, то n: = m + 1;
if m <0, то s: = s + 1;
end;
end;
begin
write ( 'n =');
    read (n);
   input (n, а);
    print (n, а);
    count (n, а, con, М);
    writeln ('количество строк, в которых сумма строк положительна =', con: 7: 2);
end.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 21:07 
Во второй строчке есть одна синтаксическая ошибка и одна смысловая. Оператор присваивания пишется как :=, без пробела посередине. В 11-й строчке не хватает запятой. В 30-й и 31-й строчках вообще какие-то последствия перевода. :-) Ну и все заполнено посторонними символами (Вы ее, что, в каком-нибудь Word'е набирали?).

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 21:15 
Спасибо)

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 21:19 
Аватара пользователя
VZAImode в сообщении #1262546 писал(а):
У меня не работает паскаль

В каком смысле не работает? Не вышел на работу?

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 21:21 
В смысле, у меня его нет на ноутбуке, а онлайн, ни один компилятор не работает.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 21:34 
Аватара пользователя
Этот не подойдёт?

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 22:34 
Аватара пользователя
VZAImode в сообщении #1262546 писал(а):
У меня не работает паскаль, поэтому я не могу проверить, работает она или нет.

Здесь можно попробовать:

http://rextester.com/l/pascal_online_compiler

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение05.11.2017, 23:58 
Меня особо порадовало if m <0, то s: = s + 1;. :D

Mental, спасибо за интересную ссылку, удобно проверять несложные программки.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 13:16 
Спасибо. Помогли)

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 15:38 
Аватара пользователя

(Оффтоп)

Dmitriy40 в сообщении #1262616 писал(а):
Меня особо порадовало if m <0, то s: = s + 1;

Это восхитительно! Особенно запятая. "then" без неё обойдется, но перед "то" - сам бог велел.
Я на вашем месте непременно отправил бы в "Цитатник". :-)

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 15:58 
Интересно что никто так и не указал автору что процедура count() решает (если вообще решает хоть что-то вразумительное) вовсе не заявленную задачу.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 16:39 
Dmitriy40 в сообщении #1262782 писал(а):
Интересно что никто так и не указал автору что процедура count() решает (если вообще решает хоть что-то вразумительное) вовсе не заявленную задачу.
После вашего поста собрался с духом и прочитал таки текст программы.
В процедуре count мы имеем две неинициализированные переменные и бессмысленный цикл, повторяющий одно и то же k раз. И никакого форматирования кода. И почему переменная con называется? Привет от французов? :mrgreen:

-- 06.11.2017, 17:40 --

Вообще, как по мне, такой код надо в Карантин сносить.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 18:48 
rockclimber в сообщении #1262801 писал(а):
В процедуре count мы имеем две неинициализированные переменные
Не совсем так, если разбирать подробно, не иницилиазирована лишь j, а вот n - не объявлена вообще. И при компиляции будет не предупреждение, а ошибка. С большой вероятностью это всего лишь опечатка и речь про переменную m.
Но даже если поправить опечатку с n и даже добавить забытый второй цикл по j, процедура всё равно будет решать вовсе не заявленную задачу! В этом и соль. Что даже после исправления ошибок исходная задача так и останется нерешённой. :mrgreen:
Ещё порадовал подсчёт количества в real переменной. Как-то это непривычно ... хотя и будет работать, по крайней мере до примерно триллиона значений.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 19:14 
Dmitriy40 в сообщении #1262828 писал(а):
Не совсем так, если разбирать подробно, не иницилиазирована лишь j
m тоже не инициализирована. Точнее, в нее передается значение переменной M, которая неинициализирована.

Dmitriy40 в сообщении #1262828 писал(а):
а вот n - не объявлена вообще.
Да, это я пропустил. Но там все еще прекраснее, оказывается: есть n в основном блоке, ее значение передается в переменную k процедуры count, а там уже используется и k, и n.

 
 
 
 Re: [Pascal] Помогите, пожалуйста, проверить программу.
Сообщение06.11.2017, 19:56 
rockclimber в сообщении #1262836 писал(а):
Точнее, в нее передается значение переменной M, которая неинициализирована.
А, это да. Но это уже не относится к самой процедуре count. ;-)

rockclimber в сообщении #1262836 писал(а):
есть n в основном блоке,
Э, нету, она не объявлена. Хотя и использована.
Если её объявить (причём выше кода count()!), то да, она будет использована в count. Но при этом наступят другие грабли: если n объявить как вещественную, то произойдёт ошибка при вызове count (вещественная n не сможет преобразоваться к байтовой k), если же n объявить целочисленной, то та же самая ошибка преобразования типов возникнет внутри count в команде n:=m+1;. Правда красиво? :facepalm:
Единственная возможность объявить переменную n - вариантного (variant) типа. Тогда будут работать неявные преобразования из вещественного в целый типы и обратно. Ценой необнаруженных ошибок программиста (типа выше) и больших накладных расходов при выполнении.

PS. Кажется последние несколько сообщений вполне тянут на "CS юмор". :D Прям не программа, а сборник юмора какой-то. :-)

 
 
 [ Сообщений: 24 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group