Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 13.12.2016
Сообщений: 13

Найти среднее число из значений записи

18.12.2017, 03:47. Показов 448. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
В программу вводятся данные о путёвках, надо найти среднюю цену для каждой страны.



Моя попытка:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
program qwe;
 
uses crt;
 
type
  
  zap = record
    
    str: string[40];
    
    dli: integer;
    
    sto: integer;
  
  
  end;
 
type
  
  zap1 = record
    
    
    sr: real;
    
    str: string[40];
  
  end;
 
 
var
  
  s: array [1..20] of zap;
  
  q: array [1..20] of zap1;
  sr, st, dl, sred: array [1..20] of real;
  
  y,k, f, ch, i, j, n: integer;
  
  b, c: real;
 
 
 
begin
  
 textcolor(0);
  
  textbackground(15);
  
 clrscr;
  
  write('Количество поездок: ');
  
  readln(n);
  
  for i := 1 to n do
  
  begin
    
    write('Страна поездки: ');
    
    readln(s[i].str);
    
    
    
    write('Длительность пребывания (не больше месяца): ');
    
    readln(s[i].dli);
    
    if not s[i].dli in [1..31] then
      
      repeat
        
        writeln('Не больше месяца. ');
        write('Длительность пребывания: ');
        
        readln(s[i].dli);
        
      until (s[i].dli in [1..31]);
    
    write('Стоимость путёвки: ');
    
    readln(s[i].sto);
    
    if not s[i].sto in [1..500000] then
      
      repeat
        
        write('Введите цену от 5 т.р. до 500 т.р.: ');
        
        readln(s[i].sto);
        
      until not s[i].sto in [5000..500000];
    
  end;
  
  
  
  clrscr;
  
  writeln('╔════════════════════════╦═════════════════════════╦═════════════════════╗');
  
  writeln('║ Страна поездки         ║ Длительность пребывания ║ Стоимость путёвки   ║');
  
  writeln('╠═══╦════════════════════╬═════════════════════════╬═════════════════════╣');
  
  for i := 1 to n do
  
  begin
    
    writeln('║', i:3, '║', s[i].str:20, '║', s[i].dli:25, '║', s[i].sto:21, '║');
    
    if(i = n) then
      
      writeln('╚═══╩════════════════════╩═════════════════════════╩═════════════════════╝')
    
    else
    
      writeln('╠═══╬════════════════════╬═════════════════════════╬═════════════════════╣');
    
  end;
  
  
  
  
//[B]Тут, как мне кажется, основная проблема, не могу придумать как получить среднюю стоимость для каждой страны отдельно (если их больше, чем вложенных циклов for), и соответственно как получить среднюю стоимость для всех стран. [/B]
 
 for y := 1 to n do 
  for j := 1 to n do 
    for i := 1 to n do 
    begin
      
      
      if (j <> i) and (i <> y) and (j <> y) then
      begin
        if s[j].str = s[i].str then
        begin
          
          st[j] := s[y].sto + s[i].sto + s[j].sto;
          writeln('st[', j, ']:=st[',j,'](',st[j],')+[', i, '].sto',s[i].sto,' + s[', j, '].sto(',s[j].sto,')= ', st[j]);
          dl[j] := s[y].dli + s[i].dli + s[j].dli;
          sr[j] := st[j] / dl[j];
          q[j].sr := st[j] / dl[j];
          q[j].str := s[j].str;
        end;
        
      end;
      
    end; 
  
  
  i:=1;
while i<=n do
 begin
  j:=i+1;
  while j<=n do
   begin
    if q[j].str=q[i].str then
     begin
      for k:=j to n-1 do
      q[k].str:=q[k+1].str;
      q[k].sr:=q[k+1].sr;
      n:=n-1;
      end
     else j:=j+1;
   end;
  i:=i+1;
 end;
  
  
  
  
  
  
  writeln('╔════════════════════════╦════════════════════════════════╗');
  
  writeln('║ Страна поездки         ║ Средняя стоимость проживания   ║');
  
  writeln('╠═══╦════════════════════╬════════════════════════════════╣');
  
  for j := 1 to n do
  
  begin
    
    writeln('║', j:3, '║', q[j].str:20, '║', q[j].sr:32, '║');
    
    if (i = n) then
      
      writeln('╚═══╩════════════════════╩════════════════════════════════╝')
    
    else
    
      writeln('╠═══╬════════════════════╬════════════════════════════════╣');
    
  end;
  
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.12.2017, 03:47
Ответы с готовыми решениями:

Найти строку матрицы, в которой среднее арифметическое число отрицательных значений наибольшее
Двумерный целочисленный массив 6 строки на 3 столбцов. Заполнить его случайными значениями в пользовательском диапазоне. Найти строку в...

Найти среднее значение элементов массива в виде целочисленных значений (число и остаток)
Дан массив А из N однобайтовых чисел. Найти среднее значение из его элементов в виде целочисленных значений (число и остаток). Результат...

Дано действительное число Х и массив А, содержащий N значений. В массиве найти два члена, среднее арифметическое которых
double X = 1; double min = 100000000000,min1 =0, min2=0; int i = 0; int N = 0; ...

3
1 / 1 / 1
Регистрация: 13.12.2016
Сообщений: 13
19.12.2017, 20:00  [ТС]
Проверился по блок схеме, вроде все нормально, значит ошибка где-то в самом алгоритме записи среднего значения в переменную
Миниатюры
Найти среднее число из значений записи  
0
1 / 1 / 1
Регистрация: 13.12.2016
Сообщений: 13
19.12.2017, 21:36  [ТС]
Если вводить одну страну, то всё работает. Если две, то запоминает только вторую. Потому что переменная q[j].sr:32 считается в цикле, а выводится вне цикла (то есть только последнее значение). Может её можно как-то сохранить в другую переменную, разную для каждого цикла? Или как вообще это работает?

Обновленный код

Кликните здесь для просмотра всего текста
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
program qwe;
 
uses crt;
 
type
  
  zap = record
    
    str: string[40];
    
    dli: integer;
    
    sto: integer;
  
  
  end;
 
type
  
  zap1 = record
    
    
    sr: real;
    
    str: string[40];
  
  end;
 
 
var
  
  s: array [1..20] of zap;
  
  q: array [1..20] of zap1;
  sr, st, dl, sred: array [1..20] of real;
  
  qw,  y, k, f, ch, i, j, n: integer;
  
  b, c: real;
 
 
 
begin
  
  textcolor(0);
  
  textbackground(15);
  
  clrscr;
  
  write('Количество поездок: ');
  
  readln(n);
  
  for i := 1 to n do
  
  begin
    
    write('Страна поездки: ');
    
    readln(s[i].str);
    
    
    
    write('Длительность пребывания (не больше месяца): ');
    
    readln(s[i].dli);
    
    if not s[i].dli in [1..31] then
      
      repeat
        
        writeln('Не больше месяца. ');
        write('Длительность пребывания: ');
        
        readln(s[i].dli);
        
      until (s[i].dli in [1..31]);
    
    write('Стоимость путёвки: ');
    
    readln(s[i].sto);
    
    if not s[i].sto in [1..500000] then
      
      repeat
        
        write('Введите цену от 1р. до 500 т.р.: ');
        
        readln(s[i].sto);
        
      until not s[i].sto in [1..500000];
    
  end;
  
  
  
  clrscr;
  
  writeln('╔════════════════════════╦═════════════════════════╦═════════════════════╗');
  
  writeln('║ Страна поездки         ║ Длительность пребывания ║ Стоимость путёвки   ║');
  
  writeln('╠═══╦════════════════════╬═════════════════════════╬═════════════════════╣');
  
  for i := 1 to n do
  
  begin
    
    writeln('║', i:3, '║', s[i].str:20, '║', s[i].dli:25, '║', s[i].sto:21, '║');
    
    if(i = n) then
      
      writeln('╚═══╩════════════════════╩═════════════════════════╩═════════════════════╝')
    
    else
    
      writeln('╠═══╬════════════════════╬═════════════════════════╬═════════════════════╣');
    
  end;
  
  
  
  
  
  for j := 1 to n do 
    for i := 1 to n do 
    begin
      
      
      if (j <> i ) then
      begin
        if s[j].str = s[i].str then
        begin
          
          st[j] := s[i].sto + s[j].sto;
          dl[j] := s[i].dli + s[j].dli;
          sr[j] := st[j] / dl[j];
          q[j].sr := st[j] / dl[j];
          q[j].str := s[j].str;
          {   writeln(st[j]);
          writeln(dl[j]);
          writeln(sr[j]);
          writeln('_____');}
        end
        else 
        begin
          q[j].str := s[j].str;
          q[j].sr := s[j].sto / s[j].dli;
        end;
      end;
    end;
  
  
      { 
  
       i := 1;
       while i <= n do
       begin
         j := i + 1;
         while j <= n do
         begin
           if q[j].str = q[i].str then
           begin
             for k := j to n - 1 do
               q[k].str := q[k + 1].str;
             q[k].sr := q[k + 1].sr;
             n := n - 1;
           end
           else j := j + 1;
         end;
         i := i + 1;
       end;
  
  
      } 
  
  
  
  writeln('╔════════════════════╦════════════════════════════════╗');
  
  writeln('║ Страна поездки     ║ Средняя стоимость проживания   ║');
  
  writeln('╠════════════════════╬════════════════════════════════╣');
  
      // for j := 1 to n do
  
  begin
    
    writeln('║', q[j].str:20, '║', q[j].sr:32, '║');
    
    if (i = n) then
      
      writeln('╚════════════════════╩════════════════════════════════╝')
    
    else
    
      writeln('╠════════════════════╬════════════════════════════════╣');
    
  end;
  
  
  
end.
Миниатюры
Найти среднее число из значений записи   Найти среднее число из значений записи  
0
1 / 1 / 1
Регистрация: 13.12.2016
Сообщений: 13
19.12.2017, 22:36  [ТС]
Ой, там была проблема в том, что забыл после теста раскомментировать for на 186 строке.

Подправил, теперь работает вот так.

Код
Кликните здесь для просмотра всего текста
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
program qwe;
 
uses crt;
 
type
  
  zap = record
    
    str: string[40];
    
    dli: integer;
    
    sto: integer;
  
  
  end;
 
type
  
  zap1 = record
    
    
    sr: real;
    
    str: string[40];
  
  end;
 
 
var
  
  s: array [1..20] of zap;
  
  q: array [1..20] of zap1;
  sr, st, dl, sred: array [1..20] of real;
  
  qw,  y, k, f, ch, i, j, n: integer;
  
  b, c: real;
 
 
 
begin
  
  textcolor(0);
  
  textbackground(15);
  
  clrscr;
  
  write('Количество поездок: ');
  
  readln(n);
  
  for i := 1 to n do
  
  begin
    
    write('Страна поездки: ');
    
    readln(s[i].str);
    
    
    
    write('Длительность пребывания (не больше месяца): ');
    
    readln(s[i].dli);
    
    if not s[i].dli in [1..31] then
      
      repeat
        
        writeln('Не больше месяца. ');
        write('Длительность пребывания: ');
        
        readln(s[i].dli);
        
      until (s[i].dli in [1..31]);
    
    write('Стоимость путёвки: ');
    
    readln(s[i].sto);
    
    if not s[i].sto in [1..500000] then
      
      repeat
        
        write('Введите цену от 1р. до 500 т.р.: ');
        
        readln(s[i].sto);
        
      until not s[i].sto in [1..500000];
    
  end;
  
  
  
  clrscr;
  
  writeln('╔════════════════════════╦═════════════════════════╦═════════════════════╗');
  
  writeln('║ Страна поездки         ║ Длительность пребывания ║ Стоимость путёвки   ║');
  
  writeln('╠═══╦════════════════════╬═════════════════════════╬═════════════════════╣');
  
  for i := 1 to n do
  
  begin
    
    writeln('║', i:3, '║', s[i].str:20, '║', s[i].dli:25, '║', s[i].sto:21, '║');
    
    if(i = n) then
      
      writeln('╚═══╩════════════════════╩═════════════════════════╩═════════════════════╝')
    
    else
    
      writeln('╠═══╬════════════════════╬═════════════════════════╬═════════════════════╣');
    
  end;
  
  
  
  
  
  for j := 1 to n do 
    for i := 1 to n do 
    begin
      
      
      if (j <> i ) then
      begin
        if s[j].str = s[i].str then
        begin
          
          st[j] := s[i].sto + s[j].sto;
          dl[j] := s[i].dli + s[j].dli;
          sr[j] := st[j] / dl[j];
          q[j].sr := st[j] / dl[j];
          q[j].str := s[j].str;
          {   writeln(st[j]);
          writeln(dl[j]);
          writeln(sr[j]);
          writeln('_____');}
        end
        else 
        begin
          q[j].str := s[j].str;
          q[j].sr := s[j].sto / s[j].dli;
        end;
      end;
    end;
  
  
      
  
       i := 1;
       while i <= n do
       begin
         j := i + 1;
         while j <= n do
         begin
           if q[j].str = q[i].str then
           begin
             for k := j to n - 1 do
               q[k].str := q[k + 1].str;
             q[k].sr := q[k + 1].sr;
             n := n - 1;
           end
           else j := j + 1;
         end;
         i := i + 1;
       end;
  
  
       
  
  
  
  writeln('╔════════════════════╦════════════════════════════════╗');
  
  writeln('║ Страна поездки     ║ Средняя стоимость проживания   ║');
  
  writeln('╠════════════════════╬════════════════════════════════╣');
  
       for j := 1 to n do
  
  begin
    
    writeln('║', q[j].str:20, '║', q[j].sr:32, '║');
    
    if (i = n) then
      
      writeln('╚════════════════════╩════════════════════════════════╝')
    
    else
    
      writeln('╠════════════════════╬════════════════════════════════╣');
    
  end;
  
  
  
end.
Миниатюры
Найти среднее число из значений записи  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2017, 22:36
Помогаю со студенческими работами здесь

Дано целое число N (> 2) и набор из N чисел - значений некоторой величины,полученных в N опытах. Найти среднее значение
Можете написать програмку - Дано целое число N (&gt; 2) и набор из N чисел - значений некоторой величины, полученных в N опытах. Найти...

Дано целое число N (> 2) и набор из N чисел — значений некоторой величины, полученных в N опытах. Найти среднее значение
Дано целое число N (&gt; 2) и набор из N чисел — значений некоторой величины, полученных в N опытах. Найти среднее значение этой величины. При...

Дано целое число и набор из N чисел - значений некоторой величины. Найти среднее значение этой величины
Minmax21. Дано целое число N (&gt;2) и набор из N чисел - значений некоторой величины, полученных в N опытах. Найти среднее значение этой...

написать программу,которая вводит произвольное число значений в переменную z и находит среднее арифметическое всех введённых значений кроме отрицатель
написать программу,которая вводит произвольное число значений в переменную z и находит среднее арифметическое всех введённых значений кроме...

написать программу,которая вводит произвольное число значений в переменную z и находит среднее арифметическое всех введённых значений кроме отрицатель
написать программу,которая вводит произвольное число значений в переменную z и находит среднее арифметическое всех введённых значений кроме...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru