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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2013, 20:22   #1
serge-first
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 66
По умолчанию

Pascal ABC.net ИНТЕРЕСУЕТ ВЫДЕЛЕННОЕ ЖИРНЫМ

Задание 1: Cоздайте программу в СП PascalABC.NET, генерирующую массив целых чисел из n элементов (n задается с клавиатуры и n<=100) случайным образом из диапазона [a;b].

Исходные данные: количество элементов массива n—целое число;

границы диапазона, из которого берутся элементы массива a и b—целые числа.

Результат: массив целых чисел—mas.

Метод решения

Решение задачи разобьем на три блока: блок ввода исходных данных, блок генерации массива и блок вывода массива на экран.

Создавать массив можно с помощью генератора случайных чисел. Для этого используется функция random. Эта функция без параметров возвращает случайное вещественное число в диапазоне 0<=x<1. Если функция используется с параметром random(n), где n – целое число, то она возвращает случайное целое число в диапазоне 0<=x<n. Но прежде чем пользоваться функцией random, надо выполнить процедуру randomize, которая инициализирует генератор случайных чисел. Таким образом, если параметры n, a и b определены выше, то блок генерации массива можно реализовать так:

Код:
Randomize;

for i:=1 to n do

mas[i]:=a+random(abs(b-a+1));
? Подумайте, почему элемент массива вычисляется по такой формуле.

? Самостоятельно опишите блок ввода исходных данных и блок вывода массива на экран.


Задание 2: Измените блок вывода массива на экран таким образом, чтобы сначала выводились отрицательные элементы массива, а затем положительные и нули.

Задание 3: Дополните программу блоком вычисления сумм положительных и сумм отрицательных элементов по отдельности. Организуйте вывод полученных сумм. Реализуйте блок-схему алгоритма


Код Pascal
Код:
var
  a, b, i, n, c : integer;
  mas : array[1..100] of integer;
begin
  repeat
    writeln('введите n');
    readln(n);
    writeln('введите a и b');
    readln(a, b);
  until (n > 1) and (n < 100) and (a < b);
  randomize;
  for i := 1 to n do
  begin
    c := b - a;
    mas[i] := random(c+1) - abs(a);    
    write(mas[i]: 4)
  end;
  writeln
end.
Доработанный вариант:
Код:
var
  a, b, i, n, c : integer;
  mas : array[1..100] of integer;
begin
  repeat
    writeln('введите n');
    readln(n)
  until (n > 1) and (n < 100);
  repeat
    writeln('введите a и b');
    readln(a, b)
  until (a < b);
  randomize;
  for i := 1 to n do
  begin
    c := abs(b - a);
    if a < 0 then mas[i] := random(c+1) - abs(a);
    if a >= 0 then mas[i] := random(c+1) + a; 
    write(mas[i]: 4)
  end;
  writeln
end.

Последний раз редактировалось Stilet; 23.10.2013 в 11:30.
serge-first вне форума Ответить с цитированием
Старый 21.10.2013, 07:22   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Код:
until (n > 1) and (n < 100);
Зачем первая проверка (n > 1)? Она избыточна.
Код:
repeat
writeln('введите a и b');
readln(a, b)
until (a < b);
Хорошо бы добавить сообщение, если a > b, или уточнение, что а должно быть больше b
Код:
c := abs(b - a);
if a < 0 then mas[i] := random(c+1) - abs(a);
if a >= 0 then mas[i] := random(c+1) + a; 
write(mas[i]: 4)
Чушь. Для заполнения массива полностью хватит строки
Код:
mas[i]:=a+random(abs(b-a+1));
Дальше следим за руками. Вывод сначала отрицательных, потом положительных и нулей. Для этого дважды проходим массив.
При первом проходе проверяем, что элемент < 0, и если условие истинно, выводим элемент.
При втором проходе проверяем, что элемент >= 0, и если условие истинно, выводим элемент.
Как-то так:
Код:
if (mas[i] < 0) then write(mas[i]);
При первом проходе можно также суммировать все выводимые элементы, будет сумма отрицательных.
При втором проходе сделать дополнительную проверку, что элемент > 0 (поскольку в задаче сказано "положительные", а 0 относится к "неотрицательным") и суммировать элементы.
Блок-схема будет элементарной, посмотрите примеры и Visio Вам в помощь.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 21.10.2013, 22:59   #3
serge-first
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 66
По умолчанию

Спасибо!!!

Если честно, то я вообще запутался с этой задачей) В голове каша))

Код:
c := abs(b - a);
if a < 0 then mas[i] := random(c+1) - abs(a);
if a >= 0 then mas[i] := random(c+1) + a; 
write(mas[i]: 4)
Чушь. Для заполнения массива полностью хватит строки

Не понял, что исправить выше и куда записать:

mas[i]:=a+random(abs(b-a+1));

Последний раз редактировалось Stilet; 23.10.2013 в 11:31.
serge-first вне форума Ответить с цитированием
Старый 22.10.2013, 08:48   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Вместо
Код:
c := abs(b - a);
if a < 0 then mas[i] := random(c+1) - abs(a);
if a >= 0 then mas[i] := random(c+1) + a;
Оставить только
Код:
mas[i]:=a+random(abs(b-a+1));
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 22.10.2013, 22:34   #5
serge-first
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 66
По умолчанию

т.е. код будет иметь следующий вид?
Код:
var a, b, i, n, c : integer;
mas : array[1..100] of integer;

begin

repeat
writeln('введите n');
readln(n)

repeat
writeln('введите a и b');
readln(a, b)

until (a < b);

randomize;
for i := 1 to n do

begin

mas[i]:=a+random(abs(b-a+1));

end;

writeln

end.
хотя нет ошибка

и переменная - с - лишняя получается

Последний раз редактировалось Stilet; 23.10.2013 в 11:31.
serge-first вне форума Ответить с цитированием
Старый 23.10.2013, 06:43   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Ну у Вас пропущен в двух местах символ ";", + не закрытый repeat.
Поправил детские ошибки, код выглядит так:
Код:
var
  a, b, i, n, c: integer;
  mas: array[1..100] of integer;

begin
  writeln('введите n');
  readln(n);
  repeat
    writeln('введите a и b');
    readln(a, b)
  until (a < b);
  randomize;
  for i := 1 to n do
  begin
    mas[i] := a + random(abs(b - a + 1));
  end;
  writeln();
end.
Теперь Ваша задача просто вывести содержимое массива на экран, без сортировки, группировки и т.п.. Для этого делаете цикл "for i := 1 to n do", в котором через write() выводите значения элементов массива, после цикла вставляете writeln().

Следующая задача - вывести только отрицательные. Для этого в вышеупомянутом цикле используете условие "if (*элемент массива* < 0) then", выводите элементы так же через write().

Далее - вывести неотрицательные элементы, для этого в условие вместо "< 0" вставляете ">= 0", и так же через write() выводите.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 23.10.2013, 08:44   #7
serge-first
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 66
По умолчанию

Благодарю за помощь, надеюсь больше не потревожу)
serge-first вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на одномерные массивы Евгений77777 Помощь студентам 1 18.06.2012 22:40
Задача на одномерные массивы DANIIL1995 Паскаль, Turbo Pascal, PascalABC.NET 1 11.04.2012 19:02
задача на одномерные массивы scoffy Общие вопросы по Java, Java SE, Kotlin 0 06.01.2012 11:27
Задача на одномерные массивы. Renge Помощь студентам 7 17.03.2011 21:35