Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 25.05.2011, 23:48   #1 (permalink)
LASSTIRE
Member
 
Регистрация: 25.05.2011
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 5
По умолчанию Массивы

Здраствуйте,подскажите с решением.

В одномерном массиве,состоящем из n вещественных элементов,вычислить:
Произведение отрицательных элементов массива;
Сумму положительных элементов массива, расположенных до максимального элемента ;
изменить порядок следования элементов в массиве на обратный.

решение нужно в паскале.
LASSTIRE вне форума  

Старый 25.05.2011, 23:48
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пожалуйста, попробуйте поискать ответ в схожих обсуждениях

Массивы
Массивы
Массивы, C

Старый 25.05.2011, 23:50   #2 (permalink)
LASSTIRE
Member
 
Регистрация: 25.05.2011
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 5
По умолчанию

Цитата:
Сообщение от LASSTIRE Посмотреть сообщение
uses crt;
type mas = array[1..255] of integer;
var A: mas;
i,n,proiz: integer;
begin clrscr;
randomize;
write('Введите n: ');
readln(n); writeln;
writeln('Массив: ');
for i:=1 to n do begin
A[i]:=random(100)-50;
write(A[i]:4);
if A[i]<0 then proiz:=proiz*A[i];
end;
writeln; writeln;
writeln('произведение отрицательных: ',sum);
end.
первая часть вроде получилась, помогите дальше
LASSTIRE вне форума  
Старый 26.05.2011, 10:38   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от LASSTIRE Посмотреть сообщение
первая часть вроде получилась, помогите дальше
Не получилась - куча ошибок.
Цитата:
uses crt;
type mas = array[1..255] of integer;
var A: mas;
i,n,proiz: integer;
1. В условии задачи массив должен быть вещественным - значит такой тип и надо задавать.
2. Переопределять пользовательский тип вовсе в данном случае лишнее. То есть можно, конечно, и так - только вот зачем?
3. Не введена переменная суммы.
С учетом замечаний, раздел описания переменных формулируем так:
Код:
uses crt;
var 
 A,B: array[1..500] of real;
 i,n,Imax: integer;
 proiz: Extended;
 sum,Max: real;
Введены еще переменные для поиска номера максимального элемента массива (Max, Imax) и массив B - в нем элементы будут в обратном порядке. Кроме того, поскольку произведение может оказаться очень большим числом, формат этой переменной лучше дать расширенный. Между прочим, в Вашем варианте формат "Integer" для proiz заведомо "тесен", тут нужно хотя бы LongInt - но и его может не хватить.
Цитата:
begin clrscr;
randomize;
write('Введите n: ');
readln(n); writeln;
writeln('Массив: ');
for i:=1 to n do begin
A[i]:=random(100)-50;
write(A[i]:4);
if A[i]<0 then proiz:=proiz*A[i];
end;
С учетом замечания о типе данных массива заполнение и вывод нужно изменить. Кроме того, пропущено одно важнейшее действие: присвоение переменной proiz исходного значения 1. А выведено почему-то вовсе значение sum, т.е. переменной, которая и не объявлена даже.
Код:
begin 
 clrscr;
 randomize;
 write('Введите n: ');
 readln(n); 
 writeln;
 writeln('Массив: ');
 proiz:=1;
 for i:=1 to n do 
  begin
   A[i]:=random*100-50;
   write(A[i]:8:2);
   if A[i]<0 then proiz:=proiz*A[i];
  end;
 writeln; 
 writeln('произведение отрицательных: ',proiz:25:2);
 writeln;
Так, ну вроде с произведением разобрались. Поехали дальше.
Требуется найти номер максимального элемента и сосчитать сумму положительных элементов, расположенных до него. Это просто:
Код:
 Imax:=1;
 Max:=A[1];
 for i:=2 to n do
  if A[i]>Max then
   begin
    Max:=A[i];
    Imax:=i;
   end;
 sum:=0;
 for i:=1 to Imax do
  if A[i]>0 then sum:=sum+A[i];
 writeln('сумма положительных до максимального: ',sum:12:2);
 writeln;
Так, с этим тоже управились. Осталось перевернуть порядок следования элементов исходного массива. Нет ничего проще:
Код:
 for i:=1 to n do
  begin
   B[i]:=A[n-i+1];
   write(B[i]:8:2);
  end;
 readln;
end.
Всё! Осталось только сшить программу.
Vladimir_S вне форума  
Старый 26.05.2011, 15:02   #4 (permalink)
LASSTIRE
Member
 
Регистрация: 25.05.2011
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 5
По умолчанию

Не ожидал такого широкого ответа,
спасибо Вам ,Vladimir_S , огромное за объяснение ,за то что все подробно расписали.
LASSTIRE вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:28.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.