|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.01.2014, 15:47 | #1 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
создание програмы на делфи циклы:ввести натуральное число и определять, можно ли число представить в виде суммы двух простых чисел
1. Разработать приложение «Разложение на простые слагаемые».
Приложение должно позволять пользователю ввести натуральное число и определять, можно ли данное число представить в виде суммы двух слагаемых, каждое из которых является простым числом. Определение возможности представления числа в виде суммы двух простых слагаемых должно быть реализовано в потоке. Результаты («да» или «нет» и, слагаемые – для случая «да») должны выводиться в поле Memo. |
22.01.2014, 16:55 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Пожалуйста!
А со второй тоже всё просто (если не брать во внимание реализацию в потоке)... Без потока. берём функцию проверки числа на простоту (например, вот эту: Код:
если да - прерываем цикл и выходим. Нет - значит не вышло: Код:
|
22.01.2014, 17:56 | #3 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
грусть печаль
Последний раз редактировалось Костяхалк; 22.01.2014 в 18:04. |
22.01.2014, 18:03 | #4 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
мне кажеца что я совсем потеряный человек . и тупо не выходит подобное
|
22.01.2014, 18:21 | #5 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
ссори м
|
22.01.2014, 18:22 | #6 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmMain = class(TForm) memResults: TMemo; btnOk: TButton; edNum: TEdit; edNum2: TEdit; lbNum: TLabel; procedure btnOkClick(Sender: TObject); private { Private declarations } public { Public declarations } end; TmyTread = class(TThread) // описание типа потока private // переменные, которые нужны потоку для работы number: cardinal; // исходное число (задается из основного потока при запуске текущего потока) number2: cardinal; result: string; // результат, сформированный в формате строки // процедура обращения к визуальному компоненту (Memo) procedure WriteRes; { Private declarations } protected procedure Execute; override; end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.btnOkClick(Sender: TObject); var s: string; // вспомогательная строковая переменная s2: string; num: cardinal; // введенное пользователем число num2: cardinal; cod: integer; // код преобразования строка -> число cod2: integer; Thr: TmyTread; // переменная типа "поток TmyThread" begin s:=edNum.Text; // "считываем" введенное пользователем значение s2:= edNum2.Text; val(s,num,cod); // пытаемся преобразовать считанный текст в число val(s2,num2,cod2); if (cod<>0) OR (num=0) then // если преобразовать введенное пользователем значение в целое число не удалось или пользователь ввел ноль begin memResults.Lines.Add(s+' - некорректное значение'); // добавляем запись в Memo edNum.clear; // выделяем введенное пользователем значение edNum.SetFocus; // устанавливаем фокус в поле для ввода исходного числа exit; // выходим из процедуры обработки события end; // если пользователь ввел корректное данное edNum.Clear; // очищаем поле ввода edNum.SetFocus; // устанавливаем в него фокус edNum2.Clear; // очищаем поле ввода edNum2.SetFocus; Thr := TmyTread.Create(True); // вызываем конструктор (метод Create) для нашего потока, т.е. создает новый поток Thr.FreeOnTerminate := True; // устанавливаем свойство FreeOnTerminate в true (когда поток будет завершен, он освободит ресурсы) Thr.number:=num; // передаем число Thr.number2:=num2; Thr.Resume; // запускаем поток end; procedure TmyTread.Execute; var i,count: cardinal; begin { count:=2; // у любого числа (кроме единицы) есть два делителя: единица и оно само for i:=2 to number-1 do if number mod i =0 // если заданное пользователем число без остатка делится на i then inc(count); // мы нашли еще один делитель, поэтому увеличиваем количество делителей. str(count,result); // преобразуем полученное кол-во делителей в строковый тип // sleep(50); // задержка (не нужна для вычислений, используется толко для демонстрации } while (number<>0) and (number2<>0) do if number2>number then number2:=number2 mod number; else number:=number mod number2; if number2=0 then count:=number; else count:=number2; str(count,result); Synchronize(WriteRes); end; procedure TmyTread.WriteRes; begin frmMain.memResults.lines.add('исход ные числа: ' + IntToStr(number)+ ' , ' + IntToStr(number2)+ '; НОД:'+ result + ' .'); end; end. |
22.01.2014, 18:22 | #7 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
как сделать чтоб это работало?
|
22.01.2014, 18:55 | #8 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
вот что получаеца
|
22.01.2014, 23:39 | #9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
|
|
23.01.2014, 01:05 | #10 |
Пользователь
Регистрация: 22.01.2014
Сообщений: 21
|
unit1.pas(109,24) Error: Incompatible type for arg no. 1: Got "untyped", expected "<procedure variable type of procedure of object;Register>"
Synchronize(WriteRes); ошибка |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ЦИКЛЫ (паскаль) - представить N в виде суммы факториалов натуральных чисел, содержащей наименьшее число слагаемых | Katya20 | Помощь студентам | 7 | 09.01.2012 01:21 |
Можно ли число N представить в виде сумы двух квадратов натуральных чисел? | Dima170792 | Помощь студентам | 2 | 24.06.2011 08:53 |
всякое целое число можно представить в виде трех простых | stasey91 | Помощь студентам | 3 | 14.04.2011 21:44 |
Дано натуральное число n. Можно ли представить его в виде суммы двух квадратов натуральных чисел? | Сеня | Помощь студентам | 3 | 29.01.2009 01:17 |