Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2008, 17:17   #1
Кирилл17
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 31
По умолчанию Замена значений в массиве, на указанное, одномерные массивы. паскаль

помогите исправить программу. она запускается а вот значений никаких не выдаёт.

Дан массив Х(20). Найти в нем заданный элемент и заменить его значение на другое, запрашиваемое после обнаружения заданного элемента. Если элемент не обнаружен, сообщить о неудачной ошибке и предложить повторить поиск другого элемента.

program p1;
uses crt;
const n=20;
var X:array [1..n] of real;
i,a,b:integer;
begin
for i:=1 to n do read(x[i]);
write('vvedite element');
readln(a);
IF X[a]=x[i] then write('vvedite zameny');
read(x[i]);
readln(b);
for i:=1 to n do
x[a]:=x[b];
if x[a]<>x[i] then begin writeln('neydachno');
end;
end.
Кирилл17 вне форума Ответить с цитированием
Старый 22.12.2008, 17:56   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Как-то так:
Код:
program p1;
uses crt;
const n=20;

var X:array [1..n] of real;
i,a,b:integer;
flag : boolean;
c : char;
begin
clrscr;

for i:=1 to n do read(x[i]);

flag := false;
while not flag do
 begin
  write('vvedite element ');
  readln(a);

  for i:=1 to n do
   begin
   IF a=x[i] then
    begin
    write('vvedite zameny ');
    readln(x[i]);
    flag := true;
    end;
   end;
 if not flag then
  begin
  writeln('Neudacha. Prodolzhit poisk? (y/n)');
  readln(c);
  if c <> 'y' then flag:=true;

  end;
 end;
writeln('Press enter to exit...');
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.12.2008, 18:47   #3
Кирилл17
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 31
По умолчанию

можно ли избавиться от флага в программе? слишком сложно для первого курса.
Кирилл17 вне форума Ответить с цитированием
Старый 22.12.2008, 19:11   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
можно ли избавиться от флага в программе?
Если смущает тип boolean, то можно поменять его, скажем, на integer и в программе заменить "true" на 1, а "false" на 0.
Или флаг совсем убрать надо?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.12.2008, 19:15   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот:
Код:
program p1;
uses crt;
const n=20;

var X:array [1..n] of real;
i,a,b:integer;
flag : integer;
c : char;
begin
clrscr;

for i:=1 to n do read(x[i]);

flag := 0;
while flag = 0 do
 begin
  write('vvedite element ');
  readln(a);

  for i:=1 to n do
   begin
   IF a=x[i] then
    begin
    write('vvedite zameny ');
    readln(x[i]);
    flag := 1;
    end;
   end;
 if flag = 0 then
  begin
  writeln('Neudacha. Prodolzhit poisk? (y/n)');
  readln(c);
  if c <> 'y' then flag:=1;
  end;
 end;
writeln('Press enter to exit...');
readln;
end.
Совсем без флага, думаю, нельзя. Иначе как программа узнает, найден элемент, или нет?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.12.2008, 19:18   #6
Кирилл17
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 31
По умолчанию

Н А Д О !!!
Кирилл17 вне форума Ответить с цитированием
Старый 22.12.2008, 19:27   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Кирилл17 Смотрите предыдущий пост. Совсем без флага не получится. Если кто-нибудь сделает без него (и без чего-то подобного), то мне будет самому интересно посмотреть.
PS: В вашем варианте, хоть он и неправильный, тоже присутствует флаг (X[a]). Так что не вижу проблемы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.12.2008, 19:37   #8
Кирилл17
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 31
По умолчанию

я не понимаю что такое флаг. нам его давали на самостоятельное обучение. я нигде не нашел информации про него.теперь мучаюсь.
как тогда с помощью флага решить эту задачу:дано 100 вещественных чисел. опреденить образуют ли они возрастающую последовательность.

какой наиболее понятный учебник по паскалю. у нас в институте нет никаких учебников. всю информацию берем либо из лекций либо из дополнительниных источников
Кирилл17 вне форума Ответить с цитированием
Старый 22.12.2008, 19:49   #9
lenant
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 10
По умолчанию

А он должен чё-то делать после замены или должен сразу закрывать? Если закрывать, то вот:
Код:
program p1;
uses crt;
const n=20;
var X:array [1..n] of real;
i,a,b:integer;
c : char;
begin
clrscr;;
for i:=1 to n do read(x[i]);
repeat
  write('vvedite element ');
  readln(a);
  for i:=1 to n do
   begin
   IF a=x[i] then
    begin
    write('vvedite zameny ');
    readln(x[i]);
    exit;
    end
    else
     if i=n then
      begin
      writeln('Neudacha. Prodolzhit poisk? (y/n)');
      readln(c);
      end;
   end;
until c='n';

end.
PS за основу брал код Sazary, надеюсь он не обидется.
lenant вне форума Ответить с цитированием
Старый 22.12.2008, 19:53   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
как тогда с помощью флага решить эту задачу:дано 100 вещественных чисел. опреденить образуют ли они возрастающую последовательность.
Пиал специально с использованием флага. Вообще можно решить проще.
Код:
uses crt;

var
mas : array[1..100] of real;
i,k : integer;
flag : boolean;

begin
clrscr;
{ zapolnyaem massiv}
for i:=1 to 100 do
 begin
 mas[i] := i;
 end;
{--}
k:=2;
flag := false;

while (not flag) and (k<=100)  do
 begin
 if mas[k-1]>mas[k] then flag := true;

 k := k+1;
 end;
if not flag then writeln('Vozrastayushaya')
else writeln('Ne vozrastaet');

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Pascal. Одномерные массивы разрешенных и неразрешенных значений. FatCat Помощь студентам 2 05.12.2008 11:39
Паскаль...Файлы, Одномерные массивы Extrem_um Помощь студентам 10 12.04.2008 18:21
Паскаль. Массивы. Замена элементов Stelix Помощь студентам 2 06.11.2007 17:20