Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 04.01.2013, 16:20   #1 (permalink)
stud993
Новичок
 
Регистрация: 04.01.2013
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите разобраться с задачей, Паскаль

выдает ошибку 18 строки, переделывала на несколько раз. не могу понять что не правильно, помогите пожалуйста!
С клавиатуры вводятся длина (<=100) вектора и его (целые) элементы. Составить новый вектор, записав в него для каждого элемента исходного вектора средние арифметическое его цифр. Результаты вывести на экран.
uses crt;
var a,b:array[1..100] of integer;
i,n,s,x,k:integer;
begin clrscr;
write('n=');
readln(n);
for i:=1 to n do
read(a[i]);
x:=a[i];
k:=0;
s:=0;
while x>0 do
begin
s:=s+x mod 10;
k:=k+1;
x:=x div 10;
end;
b[i]:=s/k;
writeln('вектор средних арифметических цифр');
for i:=1 to n do write(b[i],' ');
readkey
end.
stud993 вне форума   Ответить с цитированием

Старый 04.01.2013, 16:20
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Мой вам совет - попробуйте пока почитать схожие обсуждения

Помогите пожалуйста с задачей на одномерные массивы и матрицу. Паскаль
Помогите с задачей по С
Помогите с задачей на С++
Помогите с задачей о байтах

Старый 04.01.2013, 18:18   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от stud993 Посмотреть сообщение
выдает ошибку 18 строки, переделывала на несколько раз. не могу понять что не правильно, помогите пожалуйста!
Пожалуйста.
Ошибка в том, что Вы определяете формат массива b, как Integer, т.е. целочисленный. Между тем среднее арифметическое по природе своей число вещественное (real), и к тому же для целых чисел операция деления дробью не определена, только div. Поэтому вместо

var a,b:array[1..100] of integer;

следует задать

var
a:array[1..100] of integer;
b:array[1..100] of real;

и, кстати, вывод результата придется сделать форматным, например, так:

for i:=1 to n do write(b[i]:4:1);
Vladimir_S вне форума   Ответить с цитированием
Старый 04.01.2013, 18:36   #3 (permalink)
stud993
Новичок
 
Регистрация: 04.01.2013
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

for i:=1 to n do write(b[i]:4:1);[/QUOTE]

Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :4:1
stud993 вне форума   Ответить с цитированием
Старый 04.01.2013, 19:00   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от stud993 Посмотреть сообщение
Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :4:1
Вообще-то это полагается знать. Ну ладно, небольшой ликбез.
Допустим, мы хотим вывести на экран вещественное число R, равное 7.25.
Если мы просто напишем
Write(R);
то увидим вот что:
Код:
7.250000000000000E+000
Красиво? По-моему, не очень. Впрочем, мы можем несколько сократить запись, написав
Write(R:12);
Это означает, что на всё-провсё, включая знаковый разряд, букву "Е" и три цифры порядка, мы отвели 12 позиций. Получаем
Код:
 7.2500E+000
Всё равно смотрится не очень. А вот чтобы смотрелось лучше, следует перейти от т.н. формата с плавающей точкой (мантисса+порядок) к формату с точкой фиксированной, задав полное число позиций (первая цифра) и число позиций после десятичной точки. Так, написав
Write(R:8:3);
мы получим
Код:
      7.250
Вариантом вывода с фиксированной точкой является 0 (ноль) в качестве первой цифры. Такой формат означает, что мы устанавливаем только выводимое количество десятичных знаков после точки, а уж перед ней - как получится. То есть
Write(R:0:3);
приведет к
Код:
7.250
но уже без смещения.
Vladimir_S вне форума   Ответить с цитированием
Старый 04.01.2013, 19:34   #5 (permalink)
stud993
Новичок
 
Регистрация: 04.01.2013
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо за разъяснение, я только начинающий в этом деле
stud993 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:58.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.