Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 24.02.2014
Сообщений: 28

Найти среднее арифметическое отрицательных элементов списка и вставить его в список перед первым отрицательным элементом

12.03.2014, 20:27. Показов 1354. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите,пожалуйста, написать программу

Ввести неопределенное количество вещественных чисел и сформировать из них список. Найти среднее арифметическое отрицательных элементов списка и вставить его в список перед первым отрицательным элементом. Вывести полученную последовательность чисел на экран.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2014, 20:27
Ответы с готовыми решениями:

Дан одномерный массив целоцисленных элементов.Вставить перед первым отрицательным числом в массиве число 1111.
Привет всем) Четвертый день ковыряю задачу и ничего не получается:( Текст: Дан одномерный массив целоцисленных элементов.Вставить...

Дан массив В = (b1, b2,...,b10)Найти среднее арифметическое его положительных и отрицательных элементов.
Дан массив В = (b1, b2,...,b10)Найти среднее арифметическое его положительных и отрицательных элементов. На печать вывести: ...

Задан одномерный массив а[1..n]. Вычислить сумму элементов, расположенных между первым отрицательным элементом и максимальным элементом массива.
Задан одномерный массив а. Вычислить сумму элементов, расположенных между первым отрицательным элементом и максимальным элементом массива....

4
 Аватар для Jener
228 / 225 / 220
Регистрация: 03.07.2012
Сообщений: 466
13.03.2014, 12:39
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
uses
  crt;
type
  TData  = real;
  TPNode = ^TNode;
  TNode  = record
  Data : TData;
  Next : TPNode;
  end;
  TList = record
  First, Last : TPNode;
  end;
//  добавляет элемент в конец списка
procedure AddList(var aList : TList; n : TData);
var aL : TList;
begin
  If aList.Last = nil then begin
    New(aList.Last);
    aList.Last^.Data := n;
    aList.First := aList.Last;
  end else begin
    aL.First := nil;
    aL.Last := nil;
    AddList(aL,n);
    aList.Last^.Next := aL.First;
    aList.Last := aL.Last;
  end;
  aList.Last^.Next := nil;
end;
//  выводит список
procedure Print(aList : Tlist);
var aL : TList;
begin
  if aList.First = nil then writeln
  else begin 
    write(aList.First^.Data:7:2);
    aL.First := aList.First^.Next;  
    Print(aL);
  end;
end;  
//   вставляет элемент в список перед элементом с заданным адресом 
procedure InsertElem(var aList : TList; aPNode : TPNode; aData : TData);
var aPElem : TPNode; aL : TList;
begin
  If (aPNode = nil) or ((aList.First = nil) and (aList.Last = nil)) then exit;
  If aPNode = aList.First then begin
    New(aPElem);
    aPElem^.Data := aData;
    aPElem^.Next := aList.First;
    aList.First  := aPElem;
  end else begin
    aPElem := aList.First;
    while aPElem^.Next <> aPNode do aPElem := aPElem^.Next;
    aL.First := aPNode; aL.Last := aList.Last;
    InsertElem(aL,aPNode,aData);
    aPElem^.Next := aL.First;
  end;
end;
//  возвращает адрес первого отрицательного элемента списка
function NegElem(aList : TList) : TPNode;
var aPElem : TPNode;
begin
  If aList.First = nil then exit;
  aPElem := aList.First;
  while (aPElem^.Data>=0) and (aPElem^.Next<>nil) do 
    aPElem := aPElem^.Next;
  If aPElem^.Data<0 then NegElem := aPElem
  else NegElem := nil;
end;
//  возвращает среднее арифметическое отрицательных элементов списка
function Average(aList : TList) : TData;
var s : TData; i : byte;
begin
  i := 0; s := 0;
  while aList.First<>nil do begin
    if aList.First^.Data<0 then begin 
      s := s + aList.First^.Data;
      inc(i);
    end;  
    aList.First := aList.First^.Next;
  end;
  If i <> 0 then Average := s/i
  else Average := 0;
end;
procedure FreeMemor(var aList : Tlist);
var PElem : TPNode;
begin
  while aList.First<>nil do begin
    PElem := aList.First;
    aList.First := aList.First^.Next;
    Dispose(PElem);
  end;
  aList.Last := nil;
end;
var
  P1   : TList;
  i, n : byte;
  a    : TData;
begin
  clrscr;
  write('List size : '); readln(n); 
  P1.First := nil;
  P1.Last  := nil;
  for i := 1 to n do begin
    write(i,'-oe number : '); readln(a);
    AddList(P1,a);
  end; writeln;
  Print(P1); 
  InsertElem(P1,NegElem(P1),Average(P1));
  Print(P1);
  FreeMemor(P1);
  readln;
end.
3
2 / 2 / 0
Регистрация: 24.02.2014
Сообщений: 28
16.03.2014, 16:15  [ТС]
Торович, спасибо большое! программа работает отлично)
только я не пойму,что значит ^TNode, write(aList.First^.Data:7:2); для чего используем nil?
объясните, пожалуйста, код, а то я чайник и не могу так понять
1
 Аватар для Jener
228 / 225 / 220
Регистрация: 03.07.2012
Сообщений: 466
17.03.2014, 08:45
Не знаю, на сколько получились понятными и доходчивыми мои комментарии к коду, но как смог. Думаю по динамическим структурам, указателям вам всё же лучше что-нибудь почитать (книги, фак на форуме по динамич структурам неплохой и тд).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
uses
  crt;
type
  TData  = real;    //тип информационной части узла списка
  TPNode = ^TNode;  //указатель на узел списка
  TNode  = record   //зел списка
  Data : TData;     //информационная часть 
  Next : TPNode;    //указатель на следующий узел списка
  end;
  TList = record    //тип список
  First, Last : TPNode;  //указатели на первый и последний узлы списка
  end;
//  добавляет элемент в конец списка
procedure AddList(var aList : TList; n : TData);
var aL : TList;
begin
  If aList.Last = nil then begin  //если список пуст 
    New(aList.Last);                 //выделяем динамич память
    aList.Last^.Data := n;           //и помещаем число в список
    aList.First := aList.Last;
  end else begin                  //список не пуст
    aL.First := nil; aL.Last := nil; //инициируем вспомогат список
    AddList(aL,n);                   //помещаем в него число
    aList.Last^.Next := aL.First;    //объединяем исходный и вспомогательный списки
    aList.Last := aL.Last;
  end;
  aList.Last^.Next := nil;
end;
//  выводит список
procedure Print(aList : Tlist);
begin
  if aList.First = nil then writeln  //список пуст
  else begin                         //список не пуст
    write(aList.First^.Data:7:2);    //выводим первый элемент списка
    aList.First := aList.First^.Next;//уменьшаем список на первый элемент  
    Print(aList);                    //выводим оставшийся список
  end;
end;  
//   вставляет элемент в список перед элементом с заданным адресом 
procedure InsertElem(var aList : TList; aPNode : TPNode; aData : TData);
var aPElem : TPNode; aL : TList;
begin
  If (aPNode = nil) or ((aList.First = nil) and (aList.Last = nil)) then exit;//если список пуст или пуст заданный адрес 
  If aPNode = aList.First then begin //вставляем перед первым элементом списка
    New(aPElem);                         //выделям динамич память под элемент
    aPElem^.Data := aData;               //помещаем число в этот элемент
    aPElem^.Next := aList.First;         //помещаем его в 
    aList.First  := aPElem;              //начало списка
  end else begin                     //вставляем не перед первым элементом списка
    aPElem := aList.First;               
    while aPElem^.Next <> aPNode do aPElem := aPElem^.Next; //адрес узла списка после которого вставляем элемент
    aL.First := aPNode; aL.Last := aList.Last; //список перед первым узлом 
    InsertElem(aL,aPNode,aData);               //которого вставляем элемент
    aPElem^.Next := aL.First;                  //связываем получившийся список с исходным
  end;
end;
//  возвращает адрес первого отрицательного элемента списка
function NegElem(aList : TList) : TPNode;
var aPElem : TPNode;
begin
  If aList.First = nil then exit;  //если список пуст
  aPElem := aList.First;
  while (aPElem^.Data>=0) and (aPElem^.Next<>nil) do //пока узел списка не отрицателен и не последний в списке 
    aPElem := aPElem^.Next;                          //перебираем каждый узел последовательно
  If aPElem^.Data<0 then NegElem := aPElem           //если найденный узел отрицательный
  else NegElem := nil;                               //отрицательных узлов в списке нет
end;
//  возвращает среднее арифметическое отрицательных элементов списка
function Average(aList : TList) : TData;
var s : TData; i : byte;
begin
  i := 0; s := 0;
  while aList.First<>nil do begin       //пока не кончился список
    if aList.First^.Data<0 then begin      //если элемент отрицательный
      s := s + aList.First^.Data;          //суммируем его
      inc(i);                              //кол-во отрицательных элементов
    end;  
    aList.First := aList.First^.Next;   //переходим к следующему элементу
  end;
  If i <> 0 then Average := s/i         //если есть отрицательные элементы
  else Average := 0;                    //нет отрицательных элементов
end;
//  освобождает динамич память
procedure FreeMemor(var aList : Tlist);
var PElem : TPNode;
begin
  while aList.First<>nil do begin
    PElem := aList.First;
    aList.First := aList.First^.Next;
    Dispose(PElem);
  end;
  aList.Last := nil;
end;
var
  P1   : TList;
  i, n : byte;
  a    : TData;
begin
  clrscr;
  write('List size : '); readln(n); 
  P1.First := nil; P1.Last  := nil; //инициируем список
  //добавляем в список n чисел
  for i := 1 to n do begin
    write(i,'-oe number : '); readln(a);
    AddList(P1,a);
  end; 
  Print(P1); //выводим исходный список
  //вставляем в список средн арифм отрицательных элементов 
  //перед первым отрицательным
  InsertElem(P1,NegElem(P1),Average(P1)); 
  Print(P1); //преобразованный список
  FreeMemor(P1);  //освобождаем динамическую память
  readln;
end.
3
2 / 2 / 0
Регистрация: 24.02.2014
Сообщений: 28
29.03.2014, 20:13  [ТС]
Торович, спасибо больщущее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2014, 20:13
Помогаю со студенческими работами здесь

Найти количество элементов, расположенных перед первым минимальным элементом
Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных перед первым минимальным элементом

Вставить элемент с данным значением k после перед первым положительным элементом массива
Вставить элемент с данным значением k после перед первым положительным элементом массива

Вставить среднее арифметическое элементов массива после всех элементов, его превышающих
Вставить среднее арифметическое элементов массива после всех элементов, его превышающих (одномерный массив): Дублирование тем...

Вставить перед последним отрицательным элементом массива число, равное наибольшему из всех элементов.
1. Вставить перед последним отрицательным элементом массива число, равное наибольшему из всех элементов.

Вставить новый элемент перед первым отрицательным элементом массива
Решите пожалуйста две задачи кому не трудно!)) Заранее спасибо!) 1)Вставить новый элемент перед первым отрицательным элементом.? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru