Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите разобраться с задачей, Паскаль (http://www.tehnari.ru/f41/t83456/)

stud993 04.01.2013 16:20

Помогите разобраться с задачей, Паскаль
 
выдает ошибку 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[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.

Vladimir_S 04.01.2013 18:18

Цитата:

Сообщение от stud993 (Сообщение 843121)
выдает ошибку 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);

stud993 04.01.2013 18:36

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

Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :4:1

Vladimir_S 04.01.2013 19:00

Цитата:

Сообщение от stud993 (Сообщение 843167)
Спасибо большое за помощь, подскажите еще пожалуйста от куда взялись цифры :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
но уже без смещения.

stud993 04.01.2013 19:34

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


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.