Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите, пожалуйста, написать код программы в Pascal ABC. > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
AnnetkaIce
Признак делимости. Дано натуральное число N (N<1000). Найти минимальное число A, которое делится нацело на N, и в десятичной записи которого используются лишь нули и единицы.
Например, для N=537; A=11010111.
С комментариями, если можно. Спасибо большое заранее.
tig81
Ваши идеи?
AnnetkaIce
{Признак делимости. Дано натуральное число N (N<=1000).
Найти минимальное число A, которое делится нацело на N,
и в десятичной записи которого используются лишь нули и единицы.
Например, для N=537; A=11010111.}

uses crt;
var
N, i, m, S, K: integer;
A: string;
flag, error: boolean;

begin
writeln (' Признак делимости.');
// Вводим число N - нужный нам делитель
repeat
error := True;
writeln;
write ('N = ');
readln(N);

// "Защита от дурака":
If not((n>0) and (n<=1000)) then
begin
// "Защита от дурака_1": при попытке ввести число N>1000 программа выводит на экран сообщение об ошибке
if N>1000 then
writeln('Ошибка ввода №1! Вы ввели число N>1000. Пожалуйста, повторите ввод. N<1000');

// "Защита от дурака_2": при попытке ввести отрицательное число программа выводит на экран сообщение об ошибке
if N<0 then
writeln ('Ошибка ввода №2! Вы ввели отрицательное число. Пожалуйста, повторите ввод. N>0');

// "Защита от дурака_3": при попытке ввести число 0 программа выводит на экран сообщение об ошибке
if N=0 then
writeln ('Ошибка ввода №3! Вы же помните - на 0 делить нельзя! Пожалуйста, повторите ввод. N>0');
error:= false;
end;
until error;
// Поиск числа, которое делится на N
i:=0;
repeat
inc(i);
K:=N*i;
// Преобразуем число K в string в A
str(K,A);
// Проверяем цифры "числа" A:
S:=0;
for m:=1 to length(A) do
begin
if (A[m]='1') or (A[m]='0') then
inc(S);
if S=length(A) then
flag:=true;
end;
until flag;
// Выводим искомое минимальное делимое(т.е. число, на которое нацело делится N)
write('A = ');
writeln(A);
writeln;
write(' Программа завершенна.');
end.



проблема в том, что эта программа не эффективна. и, кроме того, я так и не дождалась результата при введении чисел, кратных 9, как исходных данных... помогите, на днях сдавать....
Julia
Для чисел кратных 9 недостаточно типа integer для переменной k, т.к. минимальное число, которое делится на 9 - это 111111111.

Для оптимизации вашего метода можно цикл с параметром
for m:=1 to length(A) do
begin
if (A[m]='1') or (A[m]='0') then
inc(S);
if S=length(A) then
flag:=true;
end;

заменить на цикл с условием.
AnnetkaIce
каким образом: можете программу написать? или кусок ее... и она будет быстрее думать?
Julia
...
m:=1;
flag:=false;
while (m<=length(A)) and ((A[m]='1') or (a[m]='0')) do
inc(m);
if m-1=length(A) then
flag:=true;
...
Программа будет выполнять гораздо меньше операций, а потому и быстрее работать.
AnnetkaIce
программа работает точно так же, как и работала. что мне сделать, чтобы заработала так, как нужно? завтра сдавать
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.