Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помагите по информатике! 9 Класс

Salima Ibragimova Ученик (73), закрыт 5 лет назад
var
arr: array[1..100] of longint;
i, n, ans: longint;

begin
readln(n);
for i := 1 to n do
read(arr[i]);
ans := ?;
for i := 1 to n do
if arr[i] < ans then
ans := arr[i];
writeln(ans);
end.
Лучший ответ
Peer-2-Peer Мудрец (16172) 5 лет назад
Размерность массива лучше определить как тип, а переменные i, n не сто́ит объявлять как longint.
Например:

type MaxIndex = 1..100;
var arr:array [MaxIndex] of longint;
i, n: MaxIndex;

Как советуют выше, следует присвоить переменной ans значение элемента массива arr[1]. Тогда второй цикл начинай со значения 2.

ans := arr[1];
for i := 2 to n do
if arr[i] < ans then
ans := arr[i];

Даже если n меньше двух, ошибки нет; цикл просто не выполнится, а значение ans будет правильным.

°°°°°°°°°

Кстати, все три простые переменные можешь сделать типа MaxIndex. Тогда начальное значение ans будет равно 1, а в цикле присваивай переменной ans не значение элемента массива, а индекс того элемента. Далее: сравнение записывается в виде arr[i] < arr[ans]. После then: ans := i. В операторе вывода аргумент заменишь на arr[ans]. ВСЁ!!!
Peer-2-PeerМудрец (16172) 5 лет назад
Несущественное дополнение. Можно было бы определить тип-синоним для longint. Например:

type ArrType = longint;

И подставить вместо longint его синоним. Такую программу проще модифицировать. Например:

type ArrType = real;
{ Замена longint на real коснулась только одного места, в противном случае придется вспомнить все такие места}

Дальше думай самостоятельно.
Peer-2-PeerМудрец (16172) 5 лет назад
СПАСИБО ВСЕМ ЗА ГОЛОСА.
Остальные ответы
The Shane Профи (600) 5 лет назад
Ого, у нас не было такой информатки в 9 классе.
СерГо Искусственный Интеллект (101228) 5 лет назад
Вообще белиберда. Если ans - длинное целое, то как ему можно присваивать значение "?"
А цикл for, насколько я помню, если он составной, то должен выглядеть так:

for i := N1 to N2 do
begin
<ОПЕРАТОР 1>;
<ОПЕРАТОР 2>;
<ОПЕРАТОР 3>;
...
<ОПЕРАТОР k>
end.
Peer-2-PeerМудрец (16172) 5 лет назад
Солидарен, может показаться белибердой. Но, пожалуй, автор вопроса просто списал текст задания. Если я правильно соображаю, вместо знака «?» следует подставить константу.

А цикл здесь вовсе не двойной. Здесь два простых (однооператорных) цикла. В первом — ввод начальных значений, во втором — поиск наименьшего.

Конечно, странновато, что алгоритм неоптимален. Также неизвестно, чем помочь автору вопроса (суть проблемы не изложена).

А Вам лично — успехов в решении своих проблем.
Юрий Моисеев Оракул (83936) 5 лет назад
Вместо ans := ?; напиши: write('ans=');readln(ans);
Peer-2-PeerМудрец (16172) 5 лет назад
Хороший совет! Присоединяюсь.
ал К Мудрец (16395) 5 лет назад
ans :=arr[1]
Peer-2-PeerМудрец (16172) 5 лет назад
Может быть.
Однако есть случай, в котором алгоритм не будет работать (не уточняю).
ал К Мудрец (16395) ну, если ввести н=0...
Похожие вопросы