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

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

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

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

Паскаль. Задача по преобразованию

Натуличка

Новые
Регистрация
6 Фев 2012
Сообщения
46
Реакции
0
Баллы
0
Паскаль. Задача по преобразованию

дан массив. Поменять местами первый и минимальный элемент. Если элементов с мин. значением несколько, то в обмене должен учавствовать последний из них.
вот как у меня получилось решить эту задачу
var a: array [1..30] of integer;
i,n,min,imin: integer;
begin
writeln ('ввод кол-ва элементов массива');
readln (n);
writeln ('ввод элементы массива');
for:=1 to n do
readln (a);
writeln;
min:=a[1];
imin:=1;
for:i=2 to n do
if a<min then
min:=a[1];
imin:=i;
a [imin]:=a[1];
a[1]:=min;
for:=1 to n do
writeln ('a=');
readln
end.
но к сожалению программа не выполняет условие в ответе у меня появляется:
а:=
а:=
а:=
помогите, разобраться!
 
Как написали, так и появляется:
Надо так:
writeln ('a= ',a);
А то Вы выводите только текст, заключенный в кавычки.
Кроме того, программа не доделана: не обработана ситуация с несколькими элементами, имеющими одинаковое минимальное значение.
 
У меня вообще ваш код минимум 2 ошибки выдал на этапе компиляции. Вы зачем после for двоеточие ставите?
Правильно писать надо так:
Код:
for[B] i:=1[/B] to n do
 
У меня вообще ваш код минимум 2 ошибки выдал на этапе компиляции. Вы зачем после for двоеточие ставите?
Лёша, так я ей уже советовал писать и отлаживать программы прямо на компьютере, а не в тетрадке - не хочет. Ну что же тут поделаешь...:tehnari_ru_325:
 
У меня вообще ваш код минимум 2 ошибки выдал на этапе компиляции. Вы зачем после for двоеточие ставите?
Правильно писать надо так:
Код:
for[B] i:=1[/B] to n do

это у меня случайно получилось, я : не ставлю, пропустила i
 
Вот исправленный листинг программы
Код:
var a: array [1..30] of integer;
i,n,min,imin: integer;
begin
writeln ('ввод кол-ва элементов массива');
readln (n);
writeln ('ввод элементы массива');
for i:=1 to n do
readln (a[i]);
writeln;
min:=a[1];
imin:=1;
for i:=2 to n do
if a[i]<=min then begin min:=a[i]; imin:=i; end;
a [imin]:=a[1];
a[1]:=min;
for i:=1 to n do
writeln ('a[i]=',a[i]);
readln
end.
Оригинальный стиль программирования старался сохранить, хотя можно было бы обойтись меньшим количеством переменных.
 
и подумайте логически, если я пишу что у меня получилось в ответе, то значит у меня в программке нет синтаксических ответов! я послушалась вас Владимир и теперь проверяю на компе. вопрос не в синтаксисе, я когда набирала могла пропустить, вопрос в решении. демагогия ник чему
 
Вот исправленный листинг программы
Код:
var a: array [1..30] of integer;
i,n,min,imin: integer;
begin
writeln ('ввод кол-ва элементов массива');
readln (n);
writeln ('ввод элементы массива');
for i:=1 to n do
readln (a[i]);
writeln;
min:=a[1];
imin:=1;
for i:=2 to n do
if a[i]<=min then begin min:=a[i]; imin:=i; end;
a [imin]:=a[1];
a[1]:=min;
for i:=1 to n do
writeln ('a[i]=',a[i]);
readln
end.
Оригинальный стиль программирования старался сохранить, хотя можно было бы обойтись меньшим количеством переменных.

как же можно обойтись меньшим колличеством переменных? я и так беру то, что необходимо по условию
 
Про кучу вы что-нибудь слышали? Если нет - даже не заморачивайтесь.
 
Вот исправленный листинг программы
Код:
var a: array [1..30] of integer;
i,n,min,imin: integer;
begin
writeln ('ввод кол-ва элементов массива');
readln (n);
writeln ('ввод элементы массива');
for i:=1 to n do
readln (a[i]);
writeln;
min:=a[1];
imin:=1;
for i:=2 to n do
if a[i]<=min then begin min:=a[i]; imin:=i; end;
a [imin]:=a[1];
a[1]:=min;
for i:=1 to n do
writeln ('a[i]=',a[i]);
readln
end.
Оригинальный стиль программирования старался сохранить, хотя можно было бы обойтись меньшим количеством переменных.

спасибо конечно)
 
у меня должно быть еще 1 условие? по условию задачи: Если элементов с мин. значением несколько, то в обмене должен учавствовать последний из них.т.е как я думаю: if a[min]<(?) then
(?):= min
 
Там же написано:
Код:
if a[i]<=min then begin min:=a[i]; imin:=i; end;
то есть, если текущий элемент меньше минимума или равен ему, то минимуму присваивается значение текущего элемента, а его номер сохраняется в переменной номер_минимума. При этом ваше условие будет отрабатываться верно, проверьте самостоятельно на нескольких наборах значений, как это сделал я перед выкладыванием листинга.
 
Там же написано:
Код:
if a[i]<=min then begin min:=a[i]; imin:=i; end;
то есть, если текущий элемент меньше минимума или равен ему, то минимуму присваивается значение текущего элемента, а его номер сохраняется в переменной номер_минимума. При этом ваше условие будет отрабатываться верно, проверьте самостоятельно на нескольких наборах значений, как это сделал я перед выкладыванием листинга.

не получается(((((((я ввожу первый элемент 1 а последний 8. у меня 8 и 1 меняются местами, но ведь минимальный элемент у меня 1. т.е он должен остаться на месте.
 
Там же написано:
Код:
if a[i]<=min then begin min:=a[i]; imin:=i; end;
то есть, если текущий элемент меньше минимума или равен ему, то минимуму присваивается значение текущего элемента, а его номер сохраняется в переменной номер_минимума. При этом ваше условие будет отрабатываться верно, проверьте самостоятельно на нескольких наборах значений, как это сделал я перед выкладыванием листинга.

о! получилось!!!! пасибо огромнейшее! спасли! после завтра экзамен, а меня эта задача подводила!
 
Назад
Сверху