Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 17
1

Вычислить значения 39 элементов одномерного целочисленного массива F в заданном интервале

27.05.2015, 16:29. Показов 2637. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
можете помочь доделать остальные пункты?
сделал первый пункт 1) вычислить значения 39 элементов одномерного целочисленного массива F в интервале (-10,10) с использованием генератора случайных чисел.

вот остальные: 2) вычислить среднегеометрическое значение четных по значению элементов второй четверти массива;
3) определить значение самое близкое к заданному числу С среди положительных элементов всего массива;
4) упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.


https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
{P}_{a}=\sqrt[k]{{a}_{1}{a}_{2}\, ...\, {a}_{n}}=\sqrt[k]{\prod {a}_{i}}<br />



Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program v7;
var
  f:array [0..1000] of real;
  i: Integer;
 
begin        ////////////////////////////////////////////////////// 1)
 
  Writeln;  // переход на новую строку
  Writeln ('1) Генерируем одномерный массив из 39 элемента в интервале (-10,10):');   //вывод текста
  Write('   ');
  randomize;                        // генерируем рандом
  for i:=1 to 39 do
  begin
     f[i]:=random(10)-10     ;       // генерируем массив
     Write(floattostr(f[i]));
     if i<>39 then Write(', ');     // записываем через запятую
  end;
  Writeln('.');   
  end.// в конце точка
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2015, 16:29
Ответы с готовыми решениями:

Вычислить значения 39 элементов одномерного целочисленного массива V в заданном интервале
помогите пожалуйста,очень надо! 1. Вычислить значения 39 элементов одномерного целочисленного...

Вычислить значения 36 элементов одномерного целочисленного массива Т в заданном интервале
Здравствуйте! Нужно срочно решить задачи: I.Дана задача состоящая из 4 частей: 1)Вычислить...

Вычислить значения 30 элементов одномерного массива в заданном интервале
1. Вычислить значения 30 элементов одномерного целочисленного массива H в интервале (-10, 10) с...

Вычислить значения 38 элементов одномерного массива D в заданном интервале
Вычислить значения 38 элементов одномерного массива D в интервале (-9,7) с использованием...

10
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
27.05.2015, 16:37 2
Цитата Сообщение от arturuk Посмотреть сообщение
элементов второй четверти массива;....
элементы второй половины массива
Напишите границы второй четверти и второй половины массива из 39 элементов.
0
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 17
27.05.2015, 18:43  [ТС] 3
всего 19 столбцов
тогда наверно с 6 по 10 столбец вторая четверть
0
Эксперт Pascal/Delphi
6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
28.05.2015, 09:57 4
arturuk, 19 не делится на 4 и на 2.

Добавлено через 17 секунд
И 39 тоже не делится.
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
29.05.2015, 14:39 5
Цитата Сообщение от arturuk Посмотреть сообщение
39 элементов
Уточните задание. Поскольку 39 не делится нацело ни на 4, ни на 2, то где у массива вторая четверть и вторая половина, определить не представляется возможным.
0
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 17
30.05.2015, 18:24  [ТС] 6
вот похожая задача на вашем сайте...но я не понимаю .. пробовал изменить



Условие
1)Вычислить значение 31 элементов одномерного целочисленного массива F в интервале (-9,6) с использованием генератора случайных чисел
2)Вычислить произведение положительных элементов второй половины массива
3)Определить минимальное значение среди нечетных по номеру элементов третьей четверти массива
4)Упорядочить четные по значению элементы последней четверти массива по убыванию обратных значений
Код программы:
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
    program v26;
var
  f,a:array [0..1000] of real;
  p,min,pr:real;
  i,j,k,n: Integer;
  b: boolean;
 
begin        ////////////////////////////////////////////////////// 1)
 
  Writeln;  // переход на новую строку
  Writeln ('1) Генерируем одномерный массив из 31 элемента в интервале (-9,6):');   //вывод текаста
  Write('   ');
  randomize;                        // генерируем рандом
  for i:=1 to 31 do
  begin
     f[i]:=random(16)-6;            // генерируем массив
     Write(floattostr(f[i]));
     if i<>31 then Write(', ');     // записываем через запятую
  end;
  Writeln('.');                     // в конце точка
 
  ////////////////////////////////////////////////////// 2)
  Writeln;  // переход на новую строку
  Writeln ('2) Произведение второй половины массива:');   //вывод текаста
 
  pr:=1;
  for i:=1 to 31 do
  begin
     if (f[i]>0) and (i>31/2) then    //поиск положительных и элементов второй половины
        pr:=pr*f[i];                  //вычисление произведения
  end;
  Write('   Pr = ');                  //
  Write(floattostr(pr));              //вывод результата
  Writeln('.');
 
  ////////////////////////////////////////////////////// 3)
  Writeln;  // переход на новую строку
  Writeln ('3) минимальное значение среди нечетных по номеру элементов среди третьей четверти массива:');   //вывод текаста
 
  j:=1;       //счетчик четности
  min:=9;
  for i:=1 to 31 do
  begin
     if (j=1) and (i>31/2) and (i<31*3/4) then        //нечетные и третья четверть
        if f[i]<min then min:=f[i];                   //поиск минимального
     if j=1 then j:=j+1 else j:=1;
  end;
  Write('   Min = ');
  Write(floattostr(Min));                                 //вывод результата
  Writeln('.');
 
  ////////////////////////////////////////////////////// 4)
  Writeln;  // переход на новую строку
  Writeln ('4) Упорядочить четные по значению элементы последней четверти массива по убыванию обратных значений:');   //вывод текста
 
  // перенесем в новый массив требуемые значения
  k:=1; // счетчик номера элементов нового массива
  j:=1;       //счетчик четности
  for i:=1 to 31 do
  begin
     if (i>31*3/4) and (j=2) then                 // третья четверть и четные
        begin
          a[k]:=f[i];                             //формирования нового массива
          k:=k+1;
        end;
     if j=1 then j:=j+1 else j:=1;                //считаем четность
 
  end;
 
  Writeln ('   Элементы выбраны:');   //вывод текста
  write('   ');
  for i:=1 to k-1 do
  begin
     Write(floattostr(a[i]));                     // вывод массива
     if i<>k-1 then Write(', ');
  end;
 
 
  n:=k-1;          //убывание обратных значений - это тоже самое, что и возрастание значений массива, сделаем сортировку так, чтобы не было деления на 0
  repeat           // сортировка методом пузырька
   b:= false;
   Dec(n);
   for i:= 1 to n do
    if a[i] < a[i+1] then
     begin
      p:= a[i];
      a[i]:= a[i+1];
      a[i+1]:= p;
      b:= true;
     end;
  until not b;
 
 
  writeln;
  Writeln ('   Выбранные элементы отсортированы:');   //вывод текста
  write('   ');
  for i:=1 to k-1 do
  begin
     Write(floattostr(a[i]));                        //вывод массива
     if i<>k-1 then Write(', ');
  end;
  
        // теперь запишем эти элементы в наш массив обратно
  k:=1; // счетчик номера элементов нового массива
  j:=1;       //счетчик четности
  for i:=1 to 31 do
  begin
     if (i>31*3/4) and (j=2) then                     // третья четверть и четные
        begin
          f[i]:=a[k];                                 // перенос элементов обратно в массив
          k:=k+1;
        end;
     if j=1 then j:=j+1 else j:=1;                    //считаем четность
  end;
  
  Writeln;
  Writeln ('   Получился массив после переноса новых элементов:');   //вывод текста
  write('   ');;
  for i:=1 to 31 do                   // выводим получившийся массив
  begin
     Write(floattostr(f[i]));
     if i<>31 then Write(', ');                  //вывод
  end;
  Writeln('.');
 
end.
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
30.05.2015, 18:52 7
Это решение также некорректно. К примеру, автор программы считает, что вторая половина массива - это элементы с индексами 16..31. Собственно, почему не 15..31, или вообще, к примеру, не 19..31? Ещё раз. В данном случае, 31 не делится ни на 2, ни на 4. Задача некорректная.

И автор ещё всяких вольностей в решении понаделал. Например, при объявлении массива индексы начинаются с 0, в программе же элементы массива с индексом 0 не используются. В чём тайный смысл такого несоответствия - неясно.

В операторах сравнения к целочисленным переменным применяется операция "/", а не операция "div", смысла данных действий я также не понимаю.

Нет корректного задания - не будет решения. Уточните задание у Вашего преподавателя. Или вы всё ещё считаете, что, к примеру, 39 человек можно поделить на 2 или 4 равные группы?

Добавлено через 6 минут
Да, и посмотрите, может быть, в задании указано: "вычислить значения элементов 0..39 одномерного целочисленного массива F"? Если индексация массива начинается с 0, тогда элементов получится 40, и задача будет корректной.
0
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 17
30.05.2015, 21:10  [ТС] 8
пусть тогда индексация массива начинается с 0, тогда вы сможете написать программу?
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
31.05.2015, 00:17 9
Лучший ответ Сообщение было отмечено arturuk как решение

Решение

Конечно.
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
const n = 39;
var f: array [0..n] of integer;
    i, j, k, p: integer;
    sg, c: real;
begin
  randomize;
  Writeln ('1) Генерируем одномерный массив из ', n + 1, ' элементов в интервале (-10, 10):');
  for i := 0 to n do
    begin
       f[i] := -10 + random(21);
       write(f[i]:4)
    end;
  writeln;
  writeln('2) Вычисляем среднее геометрическое чётных по значению элементов 2 четверти:');
  sg := 1;
  p := 0;
  k := (n + 1) div 4;
  for i := k to k * 2 - 1 do
    if not odd(f[i])
      then begin
        sg := sg * f[i];
        inc(p);
      end;
  if p = 0
    then writeln('Не найдено чётных по значению элементов во 2 четверти массива')
    else if not odd(p) and (sg < 0)
      then begin
        writeln('Среднее геометрическое не вычислено, ошибка:');
        writeln('попытка вычисления корня степени ', p, ' из числа ', sg:0:0)
      end
      else begin
        if sg > 0
          then sg := exp(ln(sg) / p)
          else if sg < 0
            then sg := -exp(ln(-sg) / p);
        writeln('Среднее геометрическое чётных по значению элементов 2 четверти массива:');
        writeln(sg:0:10)
      end;
  writeln;
  writeln('3) Определяем ближайшее к числу С значение среди положительных элементов');
  p := 0;
  write('C = ');
  readln(c);
  for i := 0 to n do
    if f[i] > 0
      then if p = 0
        then p := i
        else if abs(f[i] - c) < abs(f[p] - c)
          then p := i;
  if p = 0
    then writeln('Положительных элементов массива не найдено')
    else writeln('Ближайшее к числу C значение среди положительных элементов: ', f[p]);
  writeln;
  writeln('4) упорядочиваем положительные элементы 2 половины массива');
  writeln('   по убыванию модулей обратных значений');
  for i := (n + 1) div 2 to n - 1 do
    if f[i] > 0
      then begin
        k := i;
        for j := i + 1 to n do if (f[j] > 0) and (abs(1 / f[k]) < abs(1 / f[j])) then k := j;
        if k > i
          then begin
            p := f[i];
            f[i] := f[k];
            f[k] := p
          end
      end;
  writeln('Упорядоченный массив:');
  for i := 0 to n do write(f[i]:4);
  writeln;
  write('Нажмите клавишу <Enter> для выхода из программы');
  readln
end.
Замечу, что вот эта часть задания идиотская:
Цитата Сообщение от arturuk Посмотреть сообщение
4) упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.
если рассматриваются только положительные элементы, модуль вычислять незачем. А по убыванию обратных значений это то же самое, что по возрастанию значений. В программе я написал строго по заданию, но, если не желаете выглядеть капитаном Очевидность, то замените:
Pascal
60
        for j := i + 1 to n do if (f[j] > 0) and (f[k] > f[j]) then k := j;
Добавлено через 21 минуту
Да, чуть не забыл. В написанном Вами фрагменте программы ошибки и некорректности. Неверно вычисляются значения элементов массива. По заданию массив целочисленный, у Вас объявлено, что массив вещественный, а это неприемлемо, потому что вещественные числа не бывают чётными или нечётными. Незачем в операторах write или writeln использовать функцию floattostr. Незачем назначать размер массива более необходимого. Массив может выводиться неверно: при строке длиннее 80 символов перенос после 80 символа будет в любом случае, и может получиться нечто такое:

-2, 0, -4, -7, -2, 7, -3, 4, 9, 1, 0, -4, 0, 7, -10, 5, 5, 10, 10, 7, -5, -9, -1
0, 3, -5, -3, 5, 7, 3, -6, 5, -8, -7, -8, 1, 7, 6, -8, 0, -9.


Здесь элемент f[22]=-10 порезало: -1 напечаталась в конце первой строки, а 0 напечатался в начале второй строки.
1
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 17
18.06.2015, 14:12  [ТС] 10
а можете эту программу поменять так чтобы вот эти 4 пункта выполнялись через оператор выбора (case of)?
вводишь число например 3 и выполняется 3 пункт :Определяем ближайшее к числу С значение среди положительных элементов. Потом дальше можно вводить другое число 2 например и выполняется это.
я попробовал переделать..но у меня выходит ошибка в строке: for i := 0 to n do . Якобы встречено for ,а ожидалось выражение?
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
18.06.2015, 18:13 11
Цитата Сообщение от arturuk Посмотреть сообщение
встречено for ,а ожидалось выражение
Ну, в синтаксисе что-то перепутали... Паскаль он такой, неточностей не допускает...

Вот, добавил менюшку. Переменная v - выбор пункта меню. При старте программы сразу генерируется массив, из-за лени, естественно, чтобы не менять вид меню из-за того, сгенерирован массив или нет.
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
const n = 39;
var f: array [0..n] of integer;
    i, j, k, p: integer;
    sg, c: real;
    v: string;
begin
  randomize;
  v := '1'; {при старте программы сразу генерируем массив}
  repeat
    writeln;
    case v[1] of
     '1': begin {генерируем массив}
            writeln('Сгенерирован одномерный массив из ', n + 1, ' элементов в интервале (-10, 10):');
            for i := 0 to n do
            begin
               f[i] := -10 + random(21);
               write(f[i]:4)
            end;
          end;
     '2': begin {вычисляем среднее геометрическое чётных по значению элементов 2 четверти}
            writeln('Исходный массив:');
            for i := 0 to n do write(f[i]:4);
            sg := 1;
            p := 0;
            k := (n + 1) div 4;
            for i := k to k * 2 - 1 do
              if not odd(f[i])
                then begin
                  sg := sg * f[i];
                  inc(p);
                end;
            if p = 0
              then writeln('Не найдено чётных по значению элементов во 2 четверти массива')
              else if not odd(p) and (sg < 0)
                then begin
                  writeln('Среднее геометрическое не вычислено, ошибка:');
                  writeln('попытка вычисления корня степени ', p, ' из числа ', sg:0:0)
                end
                else begin
                  if sg > 0
                    then sg := exp(ln(sg) / p)
                    else if sg < 0
                      then sg := -exp(ln(-sg) / p);
                  writeln('Среднее геометрическое чётных по значению элементов 2 четверти массива:');
                  writeln(sg:0:10)
                end
          end;
     '3': begin {определяем ближайшее к числу С значение среди положительных элементов}
            writeln('Исходный массив:');
            for i := 0 to n do write(f[i]:4);
            p := 0;
            write('C = ');
            readln(c);
            for i := 0 to n do
              if f[i] > 0
                then if p = 0
                  then p := i
                  else if abs(f[i] - c) < abs(f[p] - c)
                    then p := i;
            if p = 0
              then writeln('Положительных элементов массива не найдено')
              else writeln('Ближайшее к числу C значение среди положительных элементов: ', f[p])
          end;
     '4': begin {упорядочиваем положительные элементы 2 половины массива по убыванию модулей обратных значений}
            writeln('Исходный массив:');
            for i := 0 to n do write(f[i]:4);
            for i := (n + 1) div 2 to n - 1 do
              if f[i] > 0
                then begin
                  k := i;
                  for j := i + 1 to n do if (f[j] > 0) and (abs(1 / f[k]) < abs(1 / f[j])) then k := j;
                  if k > i
                    then begin
                      p := f[i];
                      f[i] := f[k];
                      f[k] := p
                    end
                end;
            writeln('Упорядоченный массив:');
            for i := 0 to n do write(f[i]:4);
            writeln
          end
     else writeln('Введено неверное значение, повторите ввод')
    end;
    writeln;
    Writeln('1 - Сгенерировать заново массив из ', n + 1, ' элементов в интервале [-10, 10]');
    writeln('2 - Вычислить среднее геометрическое чётных по значению элементов 2 четверти');
    writeln('3 - Определить ближайшее к числу С значение среди положительных элементов');
    writeln('4 - Упорядочить положительные элементы 2 половины массива');
    writeln('5 - Выйти из программы');
    writeln;
    Write('    Выберите действие: ');
    readln(v);
    if length(v) = 0 then v := '0'
  until v = '5'
end.
1
18.06.2015, 18:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2015, 18:13
Помогаю со студенческими работами здесь

Вычислить значения элементов одномерного целочисленного массива Y в интервале (-8 ,8)
Люди добрые, помогите пожалуйста решить это задание. Прошу многого, конечно, но всё же попытка не...

Вычислить значения 31 элементов одномерного целочисленного массива F в интервале (-9,6) с использованием ГСЧ
Помогите пожалуйста с задачей завтра защита курсовой а в этой теме не чего понять не могу ...

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

Вычислить значения 42 элементов одномерного целочисленного массива
Вычислить значения 42 элементов одномерного целочисленного массива Y в интервале (-10, 6) с...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru