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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2013, 18:26   #1
Grinch123
Новичок
Джуниор
 
Регистрация: 25.03.2013
Сообщений: 2
По умолчанию Обработка одномерных массивов в PascalABC

Здравствуйте, завтра нужно сдавать прогу, на ней висит зачет, а я сижу над ней уже неделю, все что сделал внизу, помогите пожалсто:
1. Вычислить значения 30 элементов одномерного целочисленного массива V в интервале (-8;7) с использованием генератора случайных чисел.
2. Вычислить сумму четных по значению элементов первой четверти массива.
3. Определить наибольший элемент среди положительных элементов последней трети.
4. Упорядочить нечетные по номеру элементы второй половины массива по убыванию.

Все что сделал:
Код:
Program Udo_4; 
 {Работа №4, вариант №065, гр. БТС-12-01,Биштаков.Р.Б.} 
 Type vector=array[1..100] of integer; 
 var Vr, n, i, a, b: integer; 
                  v: vector; 
                Dev: text; 
               name: string; 
                 Sg: real; 
                 
Procedure Part_1(Vr,n,a,b:integer; var v:vector); 
  Var i:iteger; 
Begin 
  If Vr<>1 then randomize; 
  for i:=1 to n do r[i]:=a+Round((b-a)*Random(100)/100); 
end; 

Procedure Part_2(n:integer; v:vector; var Su:real);
  var i:integer; 
      s:real;
Begin
  s:=0; 
  k:=0;
  For i:=n div 2 + 1 to n do 
    If (v[i]<>0) and (not odd(i)) then 
      begin 
      s:=v[i]; 
      k:=k+1; 
      end; 
   If k>0 then 
     If s>0 then Su:=s/k 
            else 
              If s<0 then Su:=s/k 
                             else Su:=0 
           else Su:=0; 
end; 

procedure Part_3 (n,a,b:intger; v:vector);
  var i,k,M:integer; 
 Begin 
  M:=maxint; 
  k:=0; 
  For i:=n div
Первая часть точно правильная, вторая не знаю вообще как делать и третью смог только начать(((



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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.03.2013 в 20:58.
Grinch123 вне форума Ответить с цитированием
Старый 25.03.2013, 21:50   #2
interacia
Пользователь
 
Аватар для interacia
 
Регистрация: 24.01.2013
Сообщений: 67
По умолчанию

Код:
// 2) Вычислить сумму четных по значению элементов первой четверти массива.
Sum:=0;
for i:=1 to n div 4 do
   begin
  if odd(Vr[i]) then Sum:=Sum+Vr[i];
   end;
writeln(Sum);  // Ответ
// 3) Определить наибольший элемент среди положительных элементов последней трети.
Num:=0;
bol:=true;
for i:=n-(n div 3) to n  do
   begin
  if (Vr[i]>0)and(bol) then begin bol:=false; Num:=i; end;
  if (Vr[i]>Vr[Num])and(not bol) then
    begin
    Num:=i;
    end;
   end;
writeln(Vr[Num]); // Ответ
interacia вне форума Ответить с цитированием
Старый 26.03.2013, 00:16   #3
Grinch123
Новичок
Джуниор
 
Регистрация: 25.03.2013
Сообщений: 2
По умолчанию

Спасибо большое, за быстрый ответ, очень помогли
Grinch123 вне форума Ответить с цитированием
Старый 26.03.2013, 10:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
// 2) Вычислить сумму четных по значению элементов первой четверти массива.
Sum:=0;
...
  if odd(Vr[i]) then Sum:=Sum+Vr[i];
неверно!
odd() - это функция, проверяющая число на НЕЧЁТНОСТЬ!

поэтому для суммирования чётных значений нужно:
Код:
  if not odd(Vr[i]) then Sum:=Sum+Vr[i];

вторая задача. Подход тоже правильный.
но есть косячки в реализации.

Например, если первый элемент не положительный, первая проверка не пройдёт, а вот во второй будет обращение Vr[num] при num равным 0 - вполне можно получить range check error (выход индекса массива за границы)
n-(n div 3) даст лишний элемент...
при выводе результата не проверяется, были ли вообще положительные элементы...

я бы так предложил:
Код:
Num := -1;
for i:=n-(n div 3)+1 to n do
  if Vr[i]>0 then 
    if Num<0 then Num := i
    else 
       if Vr[i]>Vr[Num] then Num := i;

{вывод результата}
if Num<0 
  then WriteLn('Подходящих элементов не найдено!')
  else  WriteLn('Наибольший положительный: ', Vr[Num]);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка одномерных массивов Pepsik Паскаль, Turbo Pascal, PascalABC.NET 11 15.07.2011 05:27
обработка одномерных массивов С++ L3to Помощь студентам 4 23.06.2011 18:58
обработка одномерных массивов!!!!!! Mr0max Паскаль, Turbo Pascal, PascalABC.NET 4 23.05.2011 16:58
Обработка одномерных массивов Volume Помощь студентам 3 18.05.2011 19:38
Обработка одномерных массивов vbchristy46 Помощь студентам 7 09.06.2010 22:24