Вопрос задан 26.07.2018 в 20:24. Предмет Информатика. Спрашивает Михайлов Никита.

Паскаль. Программа работает, но выдает не тот результат - вставляет заданное число на первое место

и зачем-то меняет другими числами оставшиеся элементы массива. Что надо исправить?Условие: Вставить перед первым четным элементом массива заданное число.program vstavka;var i,n,k,z:integer;a:array[1..1000] of integer;beginassign (input,'input.txt');assign (output,'output.txt');reset (input);rewrite (output);readln(n,z);for i:=1 to n do read (a[i]);i:=a[1];for i:=1 to n doif a[i] mod 2=0 thenbeginfor k:=n+1 downto k+1 doa[i]:=a[i-1];a[k]:=z;n:=n+1; break;end;for i:=1 to n do write(a[i],' ');close (input);close (output);end.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Kozar Lilya.
Program vstavka;
var i,n,k,z:integer;
a:array[1..1000] of integer;
begin
assign (input,'input.txt');
assign (output,'output.txt');
reset (input);
rewrite (output);
readln(n,z);
for i:=1 to n do read (a[i]);
i:=a[1]; // что это? Удаляем
for i:=1 to n do
if a[i] mod 2=0 then
begin
k:= i;
for i:=n+1 downto k+1 do
a[k]:=a[k-1]; // вместо i берем k
a[k]:=z;
break;
end;
for i:=1 to n do write(OutPut, a[i]:4);
close (input);
close (output);
end.
Теперь должно работать
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Ошибка в программе Паскаль

Программа, которую вы предоставили, предназначена для вставки заданного числа перед первым четным элементом массива. Однако, вы утверждаете, что она выдает неправильный результат. Давайте разберемся, что нужно исправить.

Ошибка в алгоритме

Одна из основных ошибок в программе заключается в неправильном использовании переменных `i` и `k`. Внутри цикла `for i:=1 to n` вы изменяете значение элемента массива `a[i]` на `a[i-1]`, что приводит к некорректному перемещению значений в массиве.

Исправление программы

Вот исправленная версия программы:

```pascal program vstavka; var i, n, z, k: integer; a: array [1..1000] of integer;

begin assign(input, 'input.txt'); assign(output, 'output.txt'); reset(input); rewrite(output);

readln(n, z); for i := 1 to n do read(a[i]);

i := 1; while (i <= n) and (a[i] mod 2 <> 0) do i := i + 1;

if i > n then i := n + 1;

for k := n + 1 downto i + 1 do a[k] := a[k - 1];

a[i] := z; n := n + 1;

for i := 1 to n do write(a[i], ' ');

close(input); close(output); end. ```

Изменения в исправленной программе

В исправленной программе были внесены следующие изменения:

1. Заменен цикл `for i := 1 to n` на `while` цикл, чтобы корректно найти позицию первого четного элемента массива. 2. Добавлена проверка `if i > n then i := n + 1`, чтобы обработать случай, когда в массиве нет четных элементов. 3. Переменная `k` в цикле `for k := n + 1 downto i + 1 do a[k] := a[k - 1]` была исправлена, чтобы корректно сдвигать элементы массива. 4. Значение `z` было вставлено перед первым четным элементом массива `a[i]`. 5. Переменная `n` была увеличена на 1, чтобы отразить добавление нового элемента в массив.

Заключение

Исправленная программа должна правильно вставить заданное число перед первым четным элементом массива. Убедитесь, что вы правильно сохраняете исходные данные в файл `input.txt` и проверьте результаты в файле `output.txt`. Если у вас возникнут дополнительные вопросы, пожалуйста, дайте мне знать!

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос