• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Массивы

Статус
В этой теме нельзя размещать новые ответы.

LASSTIRE

Новые
Регистрация
25 Май 2011
Сообщения
13
Реакции
0
Баллы
0
Массивы

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

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

решение нужно в паскале.
 
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:=random(100)-50;
write(A:4);
if A<0 then proiz:=proiz*A;
end;
writeln; writeln;
writeln('произведение отрицательных: ',sum);
end.


первая часть вроде получилась, помогите дальше
 
первая часть вроде получилась, помогите дальше

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