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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2014, 08:45   #1
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
Восклицание Арифметическое переполнение паскаль

Код:
pass: string;
B: array[1..11,1..4] of integer;
matrix, best_s: Text;

function neg_ctn(n:byte):byte;
var
y,cnt:byte;
begin
cnt:=0;
for y:=1 to 4 do
if B[n,y]<0 then Inc(cnt);
neg_ctn:=cnt;
end;

begin
clrscr;
Assign(matrix,'File.txt');
Assign(best_s,'File.txt');
Rewrite(matrix);
Rewrite(best_s);
N:=0;

repeat
write('Enter password:');
readln(pass);
Val(Copy(pass,length(pass)-1,1),N, code);
if code <> 0 then writeln('Incorrect password');
until code=0;
N:=N+2;
writeln('Password accepted');
writeln('--------------------');

Randomize;
for y:=1 to N do
begin;
for z:=1 to 4 do
begin;
B[y,z]:=Random(129)-64;
write(B[y,z]:4);
end;
writeln;
writeln(matrix);
end;
Writeln('-----------------------');

best_val:=0;
best_str:=0;
for y:=1 to N do
if neg_ctn(y)>best_val then
begin
best_val:=neg_ctn(y);
best_str:=y;
end;
if N>0 then
begin
writeln('Best string');
for y:=1 to 4 do
begin
write(B[best_str,y]:4);
write(best_s,B[best_str,y]:4);
end;
end;

Close(matrix);
Close(best_s);
readln;
end.
если у меня программа паскаль глючит, то можете скрин решения скинуть ??? а то в школе требуют... а я им не могу предоставить... т.к.к всё вроде правильно ... выдаёт ошибку орифметическое переполнение
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.

Последний раз редактировалось Alexmur07; 14.01.2014 в 08:48.
Alexmur07 вне форума Ответить с цитированием
Старый 14.01.2014, 09:02   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А что она вообще делает то?

Где именно переполнение?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 14.01.2014, 09:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

И никто не сможет.
Программа не дописана.
Цитата:
Assign(matrix,'File.txt');
Assign(best_s,'File.txt');
Не ль зя открывать файл дважды.
Короче говоря максимум что из нее можно выжать это:
Код:
var
  pass: string;
B: array[1..11,1..4] of integer;
matrix, best_s: Text;
n,y,z,best_val,
best_str:integer;

function neg_ctn(n:byte):byte;
var
y,cnt:byte;
begin
cnt:=0;
for y:=1 to 4 do
if B[n,y]<0 then Inc(cnt);
neg_ctn:=cnt;
end;
begin
Assignfile(matrix,'File.txt');
Assignfile(best_s,'File2.txt');
Rewrite(matrix);
Rewrite(best_s);
N:=0;



Randomize;
for y:=1 to N do
begin;
for z:=1 to 4 do
begin;
B[y,z]:=Random(129)-64;
write(B[y,z]:4);
end;
writeln;
writeln(matrix);
end;
Writeln('-----------------------');

best_val:=0;
best_str:=0;
for y:=1 to N do
if neg_ctn(y)>best_val then
begin
best_val:=neg_ctn(y);
best_str:=y;
end;
if N>0 then
begin
writeln('Best string');
for y:=1 to 4 do
begin
write(B[best_str,y]:4);
write(best_s,B[best_str,y]:4);
end;
end;

Close(matrix);
Close(best_s);
readln;
end;
Результат на экране:
Цитата:
-----------------------
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.01.2014, 09:31   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Stilet, +1



Цитата:
Код:
Assign(matrix,'File.txt');
Assign(best_s,'File.txt');
Rewrite(matrix);
Rewrite(best_s);
я вообще не понял этого "прикола"!!
Если нужно получить два разных текстовых файла, то нужно дать файлам РАЗНЫЕ имена (как это и сделал Виталий в своём примере).
Если файл один, то и переменная, через которую в этот файл нужно писать должна быть одна...
Весьма и весьма странный код.
Думаю, что Виталий угадал с исправлением!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.01.2014, 12:23   #5
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

всёравно идёт арифметическое переполнение
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 14.01.2014, 12:24   #6
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

Сформировать двумерный массив B размером N x 4 (N – количество строк, равное предпоследней цифре пароля +2; 4 – количество столбцов) с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. Вычислить и вывести на экран и в файл строку матрицы B, содержащую максимальное количество отрицательных элементов (оформить вычисление количества отрицательных элементов в виде функции). - это задание проверьте что тут не так с рандомом ?
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 14.01.2014, 12:44   #7
Alexmur07
Форумчанин
 
Регистрация: 20.11.2008
Сообщений: 121
По умолчанию

а всё нашёл ошибку...
Код:
B[y,z]:=Random(129)-64;
Код:
B[y,z]:=-64+Random(129);
- так надо
а до текстового файлика вы зря докапались... там всё правильно ничего менять не надо.
Разгон – вещь не определённая,
по этому конечный результат зависит от конкретного чипа (CPU или GPU а также моста), качества охлаждения и везения.
Alexmur07 вне форума Ответить с цитированием
Старый 14.01.2014, 12:45   #8
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А зачем Вам ";" после begin`a? Может он не на переполнение ругается, а?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 14.01.2014, 12:58   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexmur07 Посмотреть сообщение
а до текстового файлика вы зря докапались... там всё правильно ничего менять не надо.
глупости говорить изволите.
Удалите переменную matrix и всё, что с этой переменной связано. Напрочь!



Цитата:
Может он не на переполнение ругается, а?
да нет, скорее всего именно на переполнение.
Есть такая беда в старых компиляторах Паскаля с использованием Random и вычитанием. Компилятор по первому параметру выражения определяет тип, и отводит для Random целочисленный БЕЗЗНАКОВЫЙ тип, а тут неожиданно минус, число становится меньше нуля и возникает переполнение...
Переставить местами операнды это самый простой способ решения проблемы.
(а можно и так поступить, конечно:
Код:
.....
for z:=1 to 4 do
begin;
  B[y,z]:=Random(129);
  B[y,z]:=B[y,z]-64;
  write(B[y,z]:4);
end;
....
но переставить операторы местами явно проще (и эффективней).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арифметическое переполнение. xTODx Помощь студентам 5 26.09.2013 10:54
Найти среднее арифметическое их квадратов и среднее арифметическое их модулей. (Турбо паскаль) erte Помощь студентам 1 30.10.2012 13:08
Арифметическое переполнение GamBitFRK Помощь студентам 1 09.05.2012 22:22
Циклы. Арифметическое переполнение. sqr Паскаль, Turbo Pascal, PascalABC.NET 5 09.11.2011 01:18
Арифметическое переполнение hasana Помощь студентам 2 04.11.2010 18:08