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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 21:12   #1
specialist
 
Регистрация: 07.05.2011
Сообщений: 5
По умолчанию к элементам первой половины массива добавить минимум, а к элементам второй - добавить максимум

помогите, пожалуйста!!! не работает последний цикл for. Выводит только один элемент массива -первый.Задание звучит так: к элементам первой половины массива добавить минимальный элемент, а к элементам второй половины добавить максимальный элемент.
Код:
program zadanie6;
var
 a:array [1..6] of integer;
 i:byte;
 num:integer;
 function fmin:integer;
    var
     min:integer;
    begin
     min:=32767;
     for i:=1 to 6 do
     begin
      if a[i]<min then min:=a[i];
     end;
     fmin:=min;
    end;

     function fmax:integer;
    var
     max:integer;
    begin
     num:=1;
     max:=a[1];
     for i:=2 to 6 do
     begin
      if a[i]>max then max:=a[i];
      num:=i;
     end;
     fmax:=max;
    end;

begin
  writeln('Введите матрицу');
  for i:=1 to 6 do
  begin
  write('a[',i,']=');
  readln(a[i]);
  end;
  writeln('минимальный элемент массива: ',fmin);
  readln;
   writeln('максимальный элемент массива: ',fmax);
  readln;
    writeln('К элементам певой половины массива добавляем наименьшее значение');
     writeln;
    writeln('К элементам второй половины массива добавляем наибольшее значение');
      readln;
   for i:=1 to 6 do  {не работает}
   begin
  if i<4 then
  a[i]:= a[i]+fmin else a[i]:=a[i]+fmax;
     write(a[i],' ');
    readln;
  end;
     writeln('преобразованная матрица ');
    readln;                            
     for i:=1 to 6 do                   
      write('a[',i,']=',a[i]:5);       
    readln;
end.


________
1. Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.

2. Код обязательно нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.05.2011 в 22:23.
specialist вне форума Ответить с цитированием
Старый 07.05.2011, 22:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы допустили ряд ОЧЕНЬ грубых ошибок!
1) в цикле (который "не работает" используете функции. а они написаны с ошибкой - там же используется та же самая переменная i, что и в цикле!

2) Кроме того, всё равно было бы неверно: ведь вычисляя каждый раз заноно минимальное/максимальное значение по элементам массива в том же цикле, который изменяет значения элементов, будет приводить к тому что минимальная, максимальная величины будут постоянно изменяться. А вам этого не нужно!

вот, изучайте:
Код:
program zadanie6;
const N = 6;
var
  a: array[1..N] of integer;
  i: byte;
  num: integer;
  aMin, aMax: integer;

function fmin: integer;
var
  i, min: integer;
begin
  min := a[1];
  for i := 2 to N do
  begin
    if a[i] < min then min := a[i];
  end;
  fmin := min;
end;

function fmax: integer;
var
  i, max: integer;
begin
  num := 1;
  max := a[1];
  for i := 2 to N do
  begin
    if a[i] > max then max := a[i];
    num := i;
  end;
  fmax := max;
end;

begin
  writeln('Введите матрицу');
  for i := 1 to N do
  begin
    write('a[', i, ']=');
    readln(a[i]);
  end;
  aMin := fmin;
  writeln('минимальный элемент массива: ', aMin);
  readln;
  aMax := fmax;
  writeln('максимальный элемент массива: ', aMax);
  readln;
  writeln('К элементам певой половины массива добавляем наименьшее значение');
  writeln;
  writeln('К элементам второй половины массива добавляем наибольшее значение');
  readln;
  for i := 1 to N do
  begin
    if i <= (N div 2) then
      a[i] := a[i] + aMin
    else
      a[i] := a[i] + fmax;
    write(a[i], ' ');
  end;

  writeln;
  writeln('преобразованная матрица ');
  for i := 1 to N do
    write('  a[', i, ']=', a[i]: 5, ' ');
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.05.2011, 23:37   #3
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

не знаю как у тебя но у меня вроде все работает....
Pein95 вне форума Ответить с цитированием
Старый 08.05.2011, 01:46   #4
specialist
 
Регистрация: 07.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы допустили ряд ОЧЕНЬ грубых ошибок!
1) в цикле (который "не работает" используете функции. а они написаны с ошибкой - там же используется та же самая переменная i, что и в цикле!

2) Кроме того, всё равно было бы неверно: ведь вычисляя каждый раз заноно минимальное/максимальное значение по элементам массива в том же цикле, который изменяет значения элементов, будет приводить к тому что минимальная, максимальная величины будут постоянно изменяться. А вам этого не нужно!

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

Последний раз редактировалось Serge_Bliznykov; 08.05.2011 в 02:16.
specialist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
обращение к элементам массива в С++ с помощью указателей серг Помощь студентам 0 05.12.2009 22:58
обращение к элементам двумерного массива на С++ серг Помощь студентам 16 05.12.2009 21:01
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30