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

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

AlexZir 27.01.2010 19:18

Командой (неправильно написанной, кстати)
A[i]:=random(100)-50;
вы целочисленной переменной присваиваете вещественное значение, попробуйте использовать целочисленное деление или округление до целого значения.

Для справки: функция random возвращает значение с плавающей точкой из интервала (0;1).

GrandLeon 27.01.2010 19:43

Вложений: 1
Вложение 140048

:(..........

AlexZir 27.01.2010 20:02

Попробуйте тогда функции round() или trunc(), чтобы значения округлить, хотя их использование не приветствуется. Это точно сработает, ибо проверил :)
Код:

a[i]:=trunc(random*100-50);
И еще, ответьте, в какой именно строке показывает ошибку? Какая строка подсвечивается?

GrandLeon 27.01.2010 20:32

Ну вот заменил :confused:Ссылка удалена

А в прошлый раз строка " A[i]:=random(100)-50; "

GrandLeon 27.01.2010 20:33

Блин что-то я туплю (

AlexZir 27.01.2010 20:42

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

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

GrandLeon 27.01.2010 20:57

Выложи тогда пожалуйста сюда свой вариант программы.

Vladimir_S 27.01.2010 21:46

Так, позвольте уж и мне подключиться. По поводу задачи 2. Погонял. НИКАКИХ проблем, ошибок и т.п. Внес незначительные абсолютно непринципиальные поправки:
1. Добавил вывод упорядоченного по возрастанию массива.
2. Добавил останов в конце.
3. Причесал "лесенки" для удобочитаемости.
Листинг:
Код:

Uses crt;
Const n=15;
Var
 i,j:byte;
 a:array[1..n] of integer;
 p:integer;
Begin
 Clrscr;
 Randomize;
 For i:=1 to n do
  A[i]:=random(100)-50;

 For i:=1 to n do
  Write(a[i]:5);
 Writeln;

 For i := n downto 2 do
  For j := 2 to i do
  if A[j] < A[j-1] then
    begin
    p:= A[j];
    A[j]:= A[j-1];
    A[j-1]:= p;
    end;

 For i:=1 to n do
  Write(a[i]:5);
 Writeln;

 For i:=1 to n do
  If a[i]>0 then write(a[i]:5);

 ReadLn;
End.

Результат работы программы:
http://www.tehnari.ru/imagehosting/2...07b93a73fb.jpg
Так что уж и не знаю, что и думать. Вероятно, и впрямь транслятор лажит.

GrandLeon 27.01.2010 21:53

Ну главное что работает ))) спс))


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

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