• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите разобраться с задачей, Паскаль

  • Автор темы Автор темы stud993
  • Дата начала Дата начала

stud993

Ученик
Регистрация
4 Янв 2013
Сообщения
3
Реакции
0
Баллы
0
Помогите разобраться с задачей, Паскаль

выдает ошибку 18 строки, переделывала на несколько раз. не могу понять что не правильно, помогите пожалуйста!:tehnari_ru_837:
С клавиатуры вводятся длина (<=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);
x:=a;
k:=0;
s:=0;
while x>0 do
begin
s:=s+x mod 10;
k:=k+1;
x:=x div 10;
end;
b:=s/k;
writeln('вектор средних арифметических цифр');
for i:=1 to n do write(b,' ');
readkey
end.
 
выдает ошибку 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:4:1);
 
for i:=1 to n do write(b:4:1);[/QUOTE]

Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :4:1
 
Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :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
но уже без смещения.
 
спасибо за разъяснение, я только начинающий в этом деле
 
Назад
Сверху