Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Операция с массивом в Pascal

85K
27 ноября 2012 года
Евгений Постолов
5 / / 27.11.2012
Задача такова: переписать отрицательные элементы массива x, заключённые между минимальным и максимальным элементами, в массив y, упорядоченными по убыванию и подсчитать их количество. Указание: проверить массив x на наличие в нём отрицательных элементов.

Часть кода, что сумел сделать:

Код:
program lab5;

const
  m = 20;

var
  arr: array[1..m] of integer;
  max_num, min_num: integer;
  max_index, min_index, f1: byte;
  i: byte;

begin
  {------------ В в о д  м а с с и в а ----------------------------}
  randomize;
 
  for i := 1 to m do
  begin
    arr[i]:=-25+random(50);
    write(arr[i]:3);
  end; //Вводим рандомный массив
{------------- Проверка наличия отрицательных элементов -----------}
f1:=0; // Изначально счетчик = 0, так как мы еще ничего не нашли
for i:=1 to m do
if arr[i]<0 then // Проверяем каждый элемент на отрицательность
inc(f1); // Если нашли отрицательный - увеличиваем счетчик на единицу
writeln('');
writeln('Количество отрицательных элементов=',f1);
if f1>0 then
Begin
writeln('B массиве есть отрицательный элемент, данные верны');

  {----------- М а к с и м а л ь н о е  з н а ч е н и е ----------}
  max_index := 1;
  max_num := arr[1];
 
  for i := 2 to m do
    if arr[i] > max_num then begin
      max_index := i;
      max_num := arr[i];
    end;
 
  writeln;
  writeln('Максимальное значение : ', max_num, ' | Позиция: ', max_index);
  {----------- М и н и м а л ь н о е  з н а ч е н и е ------------}
  min_index := 1;
  min_num := arr[1];
 
  for i := 2 to m do
    if arr[i] < min_num then begin
      min_index := i;
      min_num := arr[i];
    end;
 
  writeln;
  writeln('Минимальное значение: ', min_num, ' | Позиция: ', min_index);
  writeln ();
  readln
end
else writeln('B массиве нет отрицательных элементов, введите данные заново')
end.
Собственно, осталось выписать отрицательные элементы между максимальным и минимальным значениями в новый массив и упорядочить.
Процедуры и функции использовать нельзя.
Увы, с массивами у меня пока не очень, поэтому и прошу помощи
79K
27 ноября 2012 года
FIRON
17 / / 13.03.2012
Если я правильно понимаю
Цитата:
Указание: проверить массив x на наличие в нём отрицательных элементов

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

Код:
program xlx;
var
  x,y : array[1..100] of integer;
  i,j,n,min,max : byte;
  tmp : integer;
  b : boolean;

begin
  randomize;
  write('n = ');
  readln(n); //вводим размер массива х
  min := 1;
  max := 1;
  b := false; //флаг наличия отрицательных элементов
  for i := 1 to n do
  begin
    x[i] := random(100)-50; //вводим рандомные значения для элементов х
    writeln('a[',i,'] = ',x[i]); //выводим элемент х
    if(x[i] < x[min]) then min := i; //сравниваем элемент с минимумом
    if(x[i] > x[max]) then max := i; //сравниваем элемент с максимумом
    if(x[i] < 0) then b := true; //проверяем элемент на отрицательность
  end;
  writeln('max = ',x[max],'; indexofmax = ',max); //вывод максимума и его индекса
  writeln('min = ',x[min],'; indexofmin = ',min); //вывод минимума и его индекса
  if((not b) or (min = max)) //если нет отрицательных элементов или все элементы равны
  then //выводим сообщение и закрываем программу
  begin
    writeln('have no negative elements or all elements are equal');
    readln;
    halt;
  end;
  if(min > max) //для удобства в следующем цикле
  then
  begin
    tmp := min;
    min := max;
    max := tmp;
  end;
  writeln;
  j := 1;
  for i := min to max do //заполняем массив y отрицательными элементами х между минимумом и максимумом
    if(x[i] < 0)
    then
    begin
      y[j] := x[i]; //копирование значения
      inc(j); //переход к следующему элементу y
    end;
  dec(j); //возвращаемся к кол-ву элементов y
  for i := 1 to j-1 do //сортировка массива y
    for n := i+1 to j do
      if(y[i] < y[n])
      then
      begin
        tmp := y[i];
        y[i] := y[n];
        y[n] := tmp;
      end;
  writeln('size of y = ',j);
  for i := 1 to j do
    writeln('y[',i,'] = ',y[i]);
  readln;
end.
79K
28 ноября 2012 года
FIRON
17 / / 13.03.2012
Не сразу понял, но.. Можно обойтись без b : boolean, а вместо проверки всех элементов на отрицательность, проверить является ли отрицательным x[min]. Удачного познавания)
85K
28 ноября 2012 года
Евгений Постолов
5 / / 27.11.2012
Огромное спасибо. Буду разбирать и познавать массивы... еще раз спасибо)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог