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

Суммирование M первых элементов сформированного массива с M последними элементами же массива

13.11.2008, 22:18. Показов 3051. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Файл исходных данных содержит значения величин N, M и элементов массива IVECT[1]..IVECT[19].Написать, отладить и протестировать паскаль-прогу, выполняющую:
1.чтение данных из файла.
2.формирование нового массива Newvec, каждый элемент которого есть результат деления соответствующего элемента массива IVECT на элемент этого же массива с номером N.
3.Суммирование M первых элементов сформированного массива с M последними элементами этого же массива.
4.Печать сформированного массива и значения суммы.
5.Определение положения в сформированном массиве наибольшего и наименьшего элементов, печать номеров и значений этих элементов.

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
Program Massiv;
Uses             {Подключаемый модуль для управления экраном}
      crt;
Const
      Fname='g:\f1.txt'; {путь к файлу с исходными данными}
      Nmax=19;
      Mmax=19;
Type
      VECTOR= array[1..Nmax] of real;
Var
      IVECT :VECTOR;  {исходный массив}
      Newvec:VECTOR;  {новый сформированный массив}
      N     :integer; {значение величины}
      M     :integer; {значение величины}
      i     :integer; {индексная переменная}
      Sum   :real;    {сумма}
      Max   :real;    {максимальное значение}
      Min   :real;    {минимальное значение}
      f1    :text;    {файловая переменная1}
      Nommax:integer; {номер максимального элемента в массиве newvec}
      Nommin:integer; {номер минимального элемента в массиве newvec}
Begin
{Очистка экрана}
clrscr;
{подготовка к чтению из файла}
assign(f1,Fname);
reset(f1);
writeln ('чтение из файла ', fname);
readln(f1,N); {чтение значения N }
writeln ('N=', N:4);
 
{проверка корректности считываемых данных}
IF (N<1) and (N>Nmax)
then
      Begin
      writeln(' Неверное значение N'); {вывод сообщения об ошибке}
      readln;
      Close(f1);
      exit; {закрытие файла}
      End; {IF}
readln;
 
readln(f1,M); {чтение значеня M}
writeln ('M=', M:4);
 
IF (M<1) and (M>Mmax)
then
      Begin
      writeln('Неверное значение M'); {вывод сообщения об ошибке}
      Close(f1);
      readln;
      exit;  {закрытие файла}
      End; {IF}
readln;
 
{вывод значений массива из файла}
for i:=1 to Nmax do
      begin
      readln(f1, ivect[i]);
      writeln ('ivect[', i:2, ']= ',ivect[i]:3:1);
      end;{for i}
 
{проверка корректностей значений N}
IF IVECT[N]=0
then
      Begin
      {вывод сообщения об ошибке}
      writeln (' Неверное значение N. Должно не равняться 0');
      Close(f1);
      readln;
      exit;  {закрытие файла}
 
      END; {IF}
Close(f1);
readln;
 
{формирование нового массива Newvec}
For i:=1 to N do
      Begin
      NEWVEC[i]:=IVECT[i]/IVECT[N];
      writeln('NEWVEC[', i:2,']=',' ',NEWVEC[i]:8:4);
      End; {FOR I}
readln;
 
{суммирование М первых и М последних элементов нового массива newvec}
For i:=1 to M do
      Begin
      Sum:=NEWVEC[i]+NEWVEC[Nmax+1-i];
      writeln('Sum[', i:2,']=',sum:8:4);
      End; {FOR I}
readln;
 
{определение положения наибольшего элемента в массиве и его номера}
Max:=NEWVEC[1];
Nommax:=1;
For i:=2 to Nmax do
      Begin
      IF NEWVEC[i]>=Max
      then
               Begin
               Max:=NEWVEC[i];
               Nommax:=i;
               {печать значения(ий) максимальной(ых) элемента(ов) и ее(их) номера}
               writeln ('Max= ',Max:4:2, ' Nommax= ', Nommax:2);
               writeln;
               End;{if}
      End;{for i}
 
readln;
 
{определение положения наименьшего элемента в массиве и его номера}
Min:=NEWVEC[1];
Nommin:=1;
For i:=2 to Nmax do
     Begin
     IF NEWVEC[i]<=Min
     then
           Begin
           Min:=NEWVEC[i];
           Nommin:=i;
           {печать значения(ий) минимального(ых) элемента(ов) и ее(их) номера(ов)}
           writeln ('Min= ',Min:4:2, ' Nommin= ', Nommin:2);
           writeln;
           End;{if}
     End;{for i}
 
readln;
END. {prog}
:'(:'( в субботу сдавать :'(

Добавлено через 14 минут 14 секунд
прога работает, но с ошибками...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2008, 22:18
Ответы с готовыми решениями:

Подсчитать количество четных элементов массива, расположенных между наибольшим и наименьшим элементами массива
Помогите мне решить эти 4 задачки по Паскалю,а то не получается у меня её решить(( 2)Дан...

Найти сумму первых пяти элементов массива и вывести положительные числа массива,который отличаются на единицу
Дан одномерный массив.Числа вводятся с клавиатуры.Найти сумму первых пяти элементов массива и...

Суммирование, поиск и замена элементов массива
1.Основные приёмы обработки массивов: Суммирование элементов. Поиск элементов. Замена элементов....

Поменять местами 4 средних элемента массива с 4 последними отрицательными элементами, сохраняя порядок их следования
Поменять местами четыре средних элемента массива с четырьмя последними отрицательными элементами,...

18
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
13.11.2008, 22:31 2
для пущей радости выложи пример файла из которого берутся данные
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 22:37  [ТС] 3
2
6
8
13
-5
3
1
7
8
-9
11
-3
2
14
-1
-5
10
-7
4
2
5
0
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
13.11.2008, 22:43 4
А, до субботы, я если сегодня успею, посмотрю, сегодня, иначе, если не сделают, то посмотрю завтра, можешь поведать тайну ошибки, в чем именно она....спс

Добавлено через 3 минуты 18 секунд
Ой....блин...со страхом смотрю на текст написанный понимаю, что фактически у меня написано
If до субботы then begin
If я успею then посмотрю сегодня
else begin if не сделают then посмотрю завтра end
end
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 22:48  [ТС] 5
я думаю врятли кто-то будет смотреть столько много
ну вообщем 1) там что-то с суммой
2) с минимумом
еще если допустим два одинаковых минимальных\элемента то выводит только последний, и номер соответственно тоже))
вот как-бы все

Добавлено через 34 секунды
ну с максимумом соотв тоже) эх...:'(
0
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
13.11.2008, 22:49 6
Да посмотрим стока много....ща...через пару часов освобожусь
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 22:50  [ТС] 7
уря...
0
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
13.11.2008, 22:52 8
Для начала скажу тебе, что ты постоянно закрываешь файл close(f1) а он уже закрыт!!!
или если это все одни части конуструкции if ... then тогда надо else писать

Добавлено через 32 секунды
закрой его тока в конце документа, а это сотри
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2008, 22:54 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1. В файле сделай три строки, 1-N, 2-M. В третьей строке через пробел 19 чисел, разделитель целой и дробной частей точка.
2. Неправильно определил длину нового вектора, она такая же как и у исходного.
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
Program Massiv;
Uses {Подключаемый модуль для управления экраном}
crt;
Const
Fname='file.txt'; {путь к файлу с исходными данными}
Nmax=19;
Mmax=19;
Type
VECTOR= array[1..Nmax] of real;
Var
IVECT :VECTOR; {исходный массив}
Newvec:VECTOR; {новый сформированный массив}
N :integer; {значение величины}
M :integer; {значение величины}
i :integer; {индексная переменная}
Sum :real; {сумма}
Max :real; {максимальное значение}
Min :real; {минимальное значение}
f1 :text; {файловая переменная1}
Nommax:integer; {номер максимального элемента в массиве newvec}
Nommin:integer; {номер минимального элемента в массиве newvec}
Begin
{Очистка экрана}
clrscr;
{подготовка к чтению из файла}
assign(f1,Fname);
reset(f1);
writeln ('чтение из файла ', fname);
readln(f1,N); {чтение значения N }
writeln ('N=',N);
{проверка корректности считываемых данных}
IF (N<1) and (N>Nmax)then
   Begin
    writeln(' Неверное значение N'); {вывод сообщения об ошибке}
    readln;
    Close(f1);
    exit; {закрытие файла}
   End; {IF}
readln(f1,M); {чтение значеня M}
writeln ('M=',M);
IF (M<1) and (M>Mmax) then
   Begin
     writeln('Неверное значение M'); {вывод сообщения об ошибке}
     Close(f1);
     readln;
     exit; {закрытие файла}
   End; {IF}
{вывод значений массива из файла}
writeln('Ishodnyj massiv IVECT');
for i:=1 to Nmax do
    begin
     read(f1, ivect[i]);
     write (ivect[i]:5:2);
    end;{for i}
writeln;
writeln;
{проверка корректностей значений N}
IF IVECT[N]=0 then
    Begin
   {вывод сообщения об ошибке}
     writeln (' Неверное значение N. Должно не равняться 0');
     Close(f1);
     readln;
     exit; {закрытие файла}
    END; {IF}
Close(f1);
{формирование нового массива Newvec}
writeln('Izmenennyj massiv NEWVEC');
For i:=1 to Nmax do
   Begin
     NEWVEC[i]:=IVECT[i]/IVECT[N];
     write(NEWVEC[i]:5:2);
   End; {FOR I}
writeln;
writeln;
{суммирование М первых и М последних элементов нового массива newvec}
sum:=0;
For i:=1 to M do
Sum:=NEWVEC[i]+NEWVEC[Nmax+1-i];
writeln('Sum=',sum:0:2);
writeln;
{определение положения наибольшего и наименьшего элементов в массиве
и их номеров}
Max:=NEWVEC[1];Min:=NEWVEC[1];
Nommax:=1;Nommin:=1;
For i:=2 to Nmax do
IF NEWVEC[i]>Max then
    Begin
      Max:=NEWVEC[i];
      Nommax:=i;
    end
else if NEWVEC[i]<Min then
    Begin
      Min:=NEWVEC[i];
      Nommin:=i;
    end;
{печать значения(ий) максимальной(ых) элемента(ов) и ее(их) номера}
writeln ('Max= ',Max:4:2, ' Nommax= ', Nommax:2);
writeln;
{печать значения(ий) минимального(ых) элемента(ов) и ее(их) номера(ов)}
writeln ('Min= ',Min:4:2, ' Nommin= ', Nommin:2);
readln
END. {prog}
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 22:55  [ТС] 10
тут явно не хватает мужской помощи ....
0
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
13.11.2008, 22:58 11
И как?
помогло?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2008, 23:01 12
если допустим два одинаковых минимальных\элемента то выводит только последний, и номер
Так и должно быть, он находит первый минимальный и первый максимальный. Задания вывести все элементы и нет. Потом у тебя тип real, а ты в файле ввел все числа целые, это некрасиво. Насчет нескольких максимумов. Если ты видишь два числа 2,365 и 2,365 и думаешь что они равны, то ты сурово ошибаешься, компьютер этого не видит, а видит он что-то типа 2,3650000001 и 2,3650000002.
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 23:09  [ТС] 13
хм ....по-моему насчет оформления как раз было норм))
0
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
13.11.2008, 23:10 14
С чем можно справится приблизительной погрешностью))
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
13.11.2008, 23:20  [ТС] 15
Puporev, теперь прога считает сумму каких-то двух элементов и все ..

Добавлено через 2 минуты 17 секунд
если тестить прогу, то прога считает при ошибках..и вообще не понятно как она эти цифры выводит..
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2008, 23:34 16
Я сумму у Вас не переделывал, только задал начальное значение sum:=0; иначе сумма будет неправильной. Сейчас посмотрел, у Вас ошибка, надо
Код
Sum:=0;
For i:=1 to M do
Sum:=[B]Sum+[/B]NEWVEC[i]+NEWVEC[Nmax+1-i];
А файл Вы переделали в строчку?
0
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
14.11.2008, 06:02  [ТС] 17
да, переделала
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.11.2008, 06:20 18
Вот моя программа и файл. Проверил с калькулятором, все сходится.
Вложения
Тип файла: rar Новая папка.rar (1.4 Кб, 26 просмотров)
2
0 / 0 / 0
Регистрация: 13.11.2008
Сообщений: 17
15.11.2008, 00:27  [ТС] 19
спасибо все что надо было исправить, исправила
0
15.11.2008, 00:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2008, 00:27
Помогаю со студенческими работами здесь

Поменять местами первые пять элементов массива с последними пятью элементами
Дан массив А (п). Поменять местами первые пять элементов с последними пятью элементами

Cравнение трех первых элементов массива с элементами другого массива
Задание таково: Даны два массива. Надо написать программу, которая брала бы первые три элемента...

Задать два массива целых чисел: А(12) и В(6). Найти минимальные элементы этих массивов и поменять их местами с последними элементами
Ребята, помогите с массивом.... Задать два массива целых чисел: А(12) и В(6). Найти минимальные...

Заменить каждый из элементов T[i] массива T[n] минимальным среди первых I элементов данного массива.
Помогите пожалуйста дописать программу в Turbo Pascal, я запуталась) Составьте программу...


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

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