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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2019, 20:05   #1
Apache116
 
Регистрация: 18.12.2018
Сообщений: 6
По умолчанию Работа с одномерными массивами. Подпрограммы: процедуры и функции.

Здравствуйте! Всех с Новым Годом!

Помогите пожалуйста решить задание на TurboPascal.
С массивами абсолютно не дружу
Может кто-нибудь делал похожее.

Задана последовательность значений элементов некоторого массива до и после преобразования по некоторому правилу. Определите алгоритм преобразования и напишите программу, которая:

1) формирует массив из заданного количества случайных целых чисел в заданном диапазоне и выводит элементы массива на экран;
2) по определенному вами алгоритму преобразовывает этот массив и выводит на экран элементы преобразованного массива.
3) производит заданные вычисления и выводит результат на экран.
Указания:
- преобразование массива оформить в виде процедуры;
- заданные вычисления оформить в виде функции;
- все выводы на экран осуществлять в основной программе.

Массив K = (5, –5, 4, 9, –7, –11, 0) преобразован к виду K = (0, 1, 0, 0, –1, –5, 0). Размер массива K - 21 элемент из диапазона [–56,56]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–1, 16].
Apache116 вне форума Ответить с цитированием
Старый 01.01.2019, 20:08   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы не перепутали "помогите" и "сделайте за меня"?

Назовите нормально тему, покажите свои наработки, конкретные вопросы и т.п. Если кто-то просто решит за вас, это вряд ли поможет вам разобраться.
http://www.programmersforum.ru/announcement.php?f=31

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.01.2019, 20:18   #3
Apache116
 
Регистрация: 18.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы не перепутали "помогите" и "сделайте за меня"?

Назовите нормально тему, покажите свои наработки, конкретные вопросы и т.п. Если кто-то просто решит за вас, это вряд ли поможет вам разобраться.
http://www.programmersforum.ru/announcement.php?f=31

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
вот код, подскажите, в чем ошибка, делал по образцу
программа компилируется, при запуске выдает ошибку 215: Арифметическое переполнение
Код:
uses crt;
const kol_el=21;
type mas=array[1..kol_el] of integer;
Procedure Preobr(var a:mas);
var i: integer;
begin;
writeln('Algoritm: umenshit elementy na 7');
for i:=1 to kol_el do
a[i]:=a[i]-7;
end;

Function Sum(a:mas):integer;
var i,s: integer;
begin
s:=0;
for i:=1 to kol_el do
if (a[i]>=-1) and(a[i]<=16) then s:=s+a[i];
sum:=s;
end;

var T:mas;
i:integer;
Begin
clrscr;
Randomize;
writeln('Ishodnyi massiv');
for i:=1 to kol_el do
begin
T[i]:=Random(112)-56;
write(T[i]:4);
end;
writeln;
Preobr(T);
writeln('Preobrazovanyi massiv');
for i:=1 to kol_el do
write(T[i]:4);
writeln;
write('Summa elementov v int [-1..16]= ',Sum(T));
readln;
End.
Apache116 вне форума Ответить с цитированием
Старый 01.01.2019, 20:38   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Странно, запустил несколько раз - никаких ошибок. Может, компилятор кривой и неправильный код сгенерировал ?
digitalis вне форума Ответить с цитированием
Старый 01.01.2019, 20:50   #5
Apache116
 
Регистрация: 18.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Странно, запустил несколько раз - никаких ошибок. Может, компилятор кривой и неправильный код сгенерировал ?
ошибка была в этой строке
Код:
T[i]:=Random(112)-56;
и вообще я не правильно решил все, если интересно могу скинуть правильное решение, может кому-нибудь пригодится
Apache116 вне форума Ответить с цитированием
Старый 01.01.2019, 20:50   #6
Apache116
 
Регистрация: 18.12.2018
Сообщений: 6
По умолчанию

в общем вот:
Код:
uses crt;
const kol_el=21;
type mas=array[1..kol_el] of integer;
Procedure Preobr(var a:mas);
var i: integer;
begin;
writeln('Algoritm: otricatelnye uvelichit na 6, ostalnye obratit v 0');
for i:=1 to kol_el do
if a[i]<0 then a[i]:=a[i]+6
else a[i]:=0;
end;
 
Function Sum(a:mas):integer;
var i,s: integer;
begin
s:=0;
for i:=1 to kol_el do
if (a[i]>=-1) and(a[i]<=16) then s:=s+a[i];
sum:=s;
end;
 
var T:mas;
i:integer;
Begin
clrscr;
Randomize;
writeln('Ishodnyi massiv');
for i:=1 to kol_el do
begin
T[i]:=-56+Random(113);
write(T[i]:4);
end;
writeln;
Preobr(T);
writeln('Preobrazovanyi massiv');
for i:=1 to kol_el do
write(T[i]:4);
writeln;
write('Summa elementov v int [-1..16]= ',Sum(T));
readln;
End
Apache116 вне форума Ответить с цитированием
Старый 01.01.2019, 21:51   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Не вижу разницы между
Цитата:
T[i]:=-56+Random(113);
и
Цитата:
T[i]:=Random(112)-56;
- ну чуть-чуть случайные числа будут отличаться, а чтобы ошибка ... ? . Тем боле проверено - работает без всяких яких. Тут или ошибка копипасты с оригинала (компилятору подкинули текст чуть-чуть отличный от форумного) - или какая-то мистика новогодняя. В обчем, "Ирония судьбы" .

Последний раз редактировалось digitalis; 01.01.2019 в 21:55.
digitalis вне форума Ответить с цитированием
Старый 01.01.2019, 23:12   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Я подтверждаю, при таком
Код:
T[i]:=Random(112)-56;
может произойти ошибка переполнения. В досовской Turbo Pascal 7.0 такое имело место.

Решается так.
Чтобы сгенерировать случайное целое число число из диапазона [min..max] используйте такую формулу:
Код:
random(max-min+1) + min
Вадим Мошев вне форума Ответить с цитированием
Старый 02.01.2019, 11:07   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Или я туплю после н.г., или я вообще чего-то не догоняю.
В чем крамола, что аргумент random(max-min+1) будет не 113, а 112 ? Если этот рандом нормально сформируется, то +/- чего-то -- это будет всего лишь сдвиг сформированного рандома на +/- чего-то туда-сюда. Обязательно max-min+1 должен быть нечетным ? random(3) всегда будет х'океей, а с random(2) возможно иметь грабли ? Экзешник не видит этой формулы random(max-min+1), у него на входе число, а каким боком оно получено (5-3+1 или 5-2+1) - ему по уху. Вроде так.
А уж где стоит -56 -- перед random или после -- это вообще ненаучная фантастика, мрак и чернокнижие.
Я специально прогнал в ТР7 несколько запусков с random(112) по несколько тысяч раз в каждом - и ни разу вылета не было. Повезло ?

Последний раз редактировалось digitalis; 02.01.2019 в 21:51.
digitalis вне форума Ответить с цитированием
Старый 02.01.2019, 11:23   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Не вижу разницы между
Цитата:
T[i]:=-56+Random(113);
и
Цитата:
T[i]:=Random(112)-56;
В первом случае получим интервал [-56;56], во втором [-56;55]. И все. А ошибка - то гримасы турбо паскаля, а не из-за этого. В нем тип промежуточных результатов связан с порядком следования в выражении
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Работа с одномерными массивами. XxXJa6uArXxX Помощь студентам 17 25.05.2015 23:27
Работа с одномерными массивами в С# RED1994 Помощь студентам 0 03.11.2012 18:56
работа с одномерными массивами ЭдикNEO Помощь студентам 4 07.12.2010 21:07
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05