![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AnnetkaIce |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Продвинутые Сообщений: 4 Регистрация: 21.11.2011 Город: Пермь ![]() |
Признак делимости. Дано натуральное число N (N<1000). Найти минимальное число A, которое делится нацело на N, и в десятичной записи которого используются лишь нули и единицы.
Например, для N=537; A=11010111. С комментариями, если можно. Спасибо большое заранее. |
tig81 |
![]()
Сообщение
#2
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель ![]() |
Ваши идеи?
|
AnnetkaIce |
![]() ![]()
Сообщение
#3
|
Новичок ![]() Группа: Продвинутые Сообщений: 4 Регистрация: 21.11.2011 Город: Пермь ![]() |
{Признак делимости. Дано натуральное число 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 |
![]()
Сообщение
#4
|
Ассистент ![]() ![]() ![]() ![]() Группа: Julia Сообщений: 593 Регистрация: 23.2.2007 Город: Улан-Удэ Учебное заведение: БГУ Вы: преподаватель ![]() |
Для чисел кратных 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 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Продвинутые Сообщений: 4 Регистрация: 21.11.2011 Город: Пермь ![]() |
каким образом: можете программу написать? или кусок ее... и она будет быстрее думать?
|
Julia |
![]()
Сообщение
#6
|
Ассистент ![]() ![]() ![]() ![]() Группа: Julia Сообщений: 593 Регистрация: 23.2.2007 Город: Улан-Удэ Учебное заведение: БГУ Вы: преподаватель ![]() |
...
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 |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Продвинутые Сообщений: 4 Регистрация: 21.11.2011 Город: Пермь ![]() |
программа работает точно так же, как и работала. что мне сделать, чтобы заработала так, как нужно? завтра сдавать
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 20:39 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru