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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2011, 21:11   #1
Annabelle
Новичок
Джуниор
 
Регистрация: 08.12.2011
Сообщений: 3
По умолчанию Проверка числа на принадлежность (Delphi)

Доброго времени суток!
Дана задача:
Множество K строится следующим образом: 1) два натуральных числа a, b включены в множество K; 2) для любых x, y, входящих в K, число x+y+xy включается в K. 3) других элементов в K нет. Определить, является ли Z элементом множества K, если заданы числа a, b.

Пишу код:

Код:
unit mass1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  n=7;
var
 a,b,i,Z,k,res,j,p: integer;
 MyArrray: array [1..n] of integer;
 st:string;
begin
Label4.Caption:='Элементы массива K';
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
Z:= StrToInt(Edit3.Text);
// Задаём начальные значения
MyArrray[1]:=a; MyArrray[2]:=b; i:=4;    k:=3;
MyArrray[3]:= MyArrray[1]+ MyArrray[2]+MyArrray[2]*MyArrray[1];
//Формируем массив


    for j:= 1 to k-1 do
     begin
    MyArrray[i]:=MyArrray[k]+MyArrray[j]+MyArrray[k]*MyArrray[j];
    inc(i);
    end;
  inc(k);
   for p:=1 to n do
   st := st + IntToStr(MyArrray[p]) + #13;
   Label5.Caption:=st;
    // вывод списка Label1.Caption := st;




   while (i<=7) do
   res:=0;
    for j:=1 to n do
    if ( MyArrray[j]=z) then res:=1;




   if res=1 then
         ShowMessage('Z= '+Edit3.Text + ' находится в массиве К' )
           else ShowMessage('Z= '+Edit3.Text + ' отсутствует в массиве К' );
end;

end.

Но программа виснет( когда задаю k=4, работает.
Подскажите пожалуйста, где ошибка



___________
1) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

2) для учебных задач предназначен раздел "Помощь студентам"

Не забывайте, пожалуйста, об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 09.12.2011 в 15:14.
Annabelle вне форума Ответить с цитированием
Старый 08.12.2011, 21:29   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Видимо, здесь:
Код:
i:=4;
...
for j:= 1 to k-1 do
begin
  MyArrray[i]:=MyArrray[k]+MyArrray[j]+MyArrray[k]*MyArrray[j];
  inc(i);
end;
Когда вы задаете k=4, то цикл проходит по j от 1 до 3. Но у вас только 7 элементов массива, а переменная i инициализирована значением 4. Сложим 4+3=7. Совпадает с размерностью массива MyArrray? Да. У вас будет ошибка при любой попытке задать k числом, большим 4. Здесь у вас программа вываливалась.

А вот здесь зацикливание, если i<=7:
Код:
while (i<=7) do res:=0;
Отсюда и зависание.
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 08.12.2011 в 21:35.
3D Hunter вне форума Ответить с цитированием
Старый 08.12.2011, 21:34   #3
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Annabelle Посмотреть сообщение
Доброго времени суток!
Дана задача:
Множество K строится следующим образом: 1) два натуральных числа a, b включены в множество K; 2) для любых x, y, входящих в K, число x+y+xy включается в K. 3) других элементов в K нет. Определить, является ли Z элементом множества K, если заданы числа a, b.
Вопросы по пунктам:
1)a и b любые натуральные числа? Т.е. К состоит только из натуральных чисел?
2)если для любых x, y, входящих в K, число x+y+xy включается в K, то для любых a и b (из первого вопроса) входящих в K, число a+b+ab включается в K?
3)каких других элементов?
4) Что такое Z и как оно получается?

Если условие написано "своими словами", то хотелось бы видеть оригинал.
JuniorProger вне форума Ответить с цитированием
Старый 08.12.2011, 21:39   #4
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Задача и так ясна до безобразия:
1) X и Y - это общий случай, A и B - это конкретные вводимые значения (значения переменных X и Y).
2) Исходя из 1) естественно.
3) Z=a+b+ab.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 08.12.2011, 21:46   #5
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Задача и так ясна до безобразия:
1) X и Y - это общий случай, A и B - это конкретные вводимые значения (значения переменных X и Y).
2) Исходя из 1) естественно.
3) Z=a+b+ab.
Спасибо за разъяснение. Просто люблю четко поставленные и понятно описанные задачи. А то, помню как-то помогал человеку, а он "не то имел ввиду". Поэтому и переспросил, дабы не возникало недопонимания
А интересно, автор тоже это условие подразумевал? Или у него что-то другое в голове было.
JuniorProger вне форума Ответить с цитированием
Старый 08.12.2011, 21:48   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Видимо, здесь:
Код:
i:=4;
...
for j:= 1 to k-1 do
begin
  MyArrray[i]:=MyArrray[k]+MyArrray[j]+MyArrray[k]*MyArrray[j];
  inc(i);
end;
Когда вы задаете k=4, то цикл проходит по j от 1 до 3. Но у вас только 7 элементов массива, а переменная i инициализирована значением 4. Сложим 4+3=7. Совпадает с размерностью массива MyArrray? Да. У вас будет ошибка при любой попытке задать k числом, большим 4. Здесь у вас программа вываливалась.
Вообщето только при к= 5 и не вылетит, и не зациклится на
Код:
while (i<=7) do res:=0;
а просто его обойдёт (в цикле i не меняется, как вообще из него планировалось выходить, да и зачем он?)

, в цикле

Код:
 i:=4; k:=3;

for j:= 1 to k-1 do
begin
MyArrray[i]:=MyArrray[k]+MyArrray[j]+MyArrray[k]*MyArrray[j];
inc(i);
end;
запись в массив начинается с 4 элемента, а добавляется после использования, так что не
4+3 а 3+4, то есть сначала добавляем 4 элемент потом 5 потом 6 потом 7, а то что после этого i возрастает до 8 тут ни на что не влияет.

А вообще код напоминает набор мало связанных действий, с кучей лишних переменных.

Последний раз редактировалось vovk; 08.12.2011 в 22:02. Причина: правил текст, смысла не менял.
vovk вне форума Ответить с цитированием
Старый 09.12.2011, 13:43   #7
Annabelle
Новичок
Джуниор
 
Регистрация: 08.12.2011
Сообщений: 3
По умолчанию

Немного переделала код, но вот в этом месте не работает inc(k), а почему, не могу понять(
for j:= 1 to k-1 do
begin
MyArrray[i]:=MyArrray[j]+MyArrray[k]+MyArrray[k]*MyArrray[j];
inc(i);
end;
inc(k);
Annabelle вне форума Ответить с цитированием
Старый 09.12.2011, 14:05   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

работает, но только один раз после выполнения цикла.
FaTaL вне форума Ответить с цитированием
Старый 09.12.2011, 14:17   #9
Annabelle
Новичок
Джуниор
 
Регистрация: 08.12.2011
Сообщений: 3
По умолчанию

Ну да,для n=7 должно быть только одно увеличение k на единицу
но у меня не работает
Напишите пожалуйста, какие выводит числа-элементы массива
Annabelle вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка числа на четность Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 06.11.2010 16:24
Принадлежность точки квадрату Паскаль, либо Delphi Kati Помощь студентам 1 24.02.2010 22:10
Проверка на простые числа Lemo Помощь студентам 1 29.09.2009 21:38
Проверка чётности числа Antoha79 Помощь студентам 3 23.05.2009 12:58
проверка числа на дробность _ares_ Общие вопросы C/C++ 2 07.10.2008 10:35