![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Саня |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Такая задача: "Выбор из двузначных чисел". Даны n (n>=12) различных двузначных чисел. Написать программу выбора из них двух чисел так, чтобы их разность давала двузначное число, записываемое двумя одинаковыми числами.
У меня ни как не получаеться ![]() ![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата У меня ни как не получаеться Значит, пробовал? Какие есть идеи? Исходники (если есть) - в студию... :D |
Саня |
![]()
Сообщение
#3
|
Гость ![]() |
Идеи просто кончились
![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Тогда держи:
Код type numset = set of byte; const n = 15; arr: array[1 .. n] of byte = (23, 53, 71, 96, 34, 56, 29, 43, 56, 32, 68, 50, 49, 24, 67); var x: array[1 .. n] of integer; nums: array[1 .. n] of numset; i: integer; procedure writeset(i: integer); var x, count: byte; begin if nums[i] = [] then exit; writeln( 'набор #', i ); count := 0; for x := 10 to 99 do if x in nums[i] then begin write(x:4); inc(count) end; if count < 2 then write( ' - нет пары' ); writeln; end; begin for i := 1 to n do begin x[i] := arr[i] mod 11; nums[ x[i] ] := nums[ x[i] ] + [ arr[i] ]; end; writeln( 'любые из этих чисел:' ); for i := 1 to n do writeset(i); end. Набирал без компилятора, так что могут быть ошибки ... Проверь ;) |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
синтаксических ошибок нет.
![]() Цитата Написать программу выбора из них двух чисел так надо всего 2 числа произвольных таких указать, или все пары чисел, удовлетворяющих этому правилу? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Саня |
![]()
Сообщение
#6
|
Гость ![]() |
Я тут немного доработал прогу под себя, проверьте: И есть еще пара вопросов..
Код type numset = set of byte; const MaxN=100; var x: array[1 .. maxN] of integer; arr: array[1 .. maxN] of byte; nums: array[1 .. maxN] of numset; i,n,m: integer; procedure writeset(i: integer); var x, count: byte; begin if nums[i] = [] then exit; writeln( 'nabor #', i ); count := 0; for x := 10 to 99 do if x in nums[i] then begin write(x:4); inc(count) end; if count < 2 then write( ' - net par' ); writeln; end; begin repeat writeln('Vvedite kolichestvo elementov'); readln(n) until n<=MaxN; For m:=1 to n do begin write('a[',m,']= '); readln(arr[m]) end; for i := 1 to n do begin x[i] := arr[i] mod 11; nums[ x[i] ] := nums[ x[i] ] + [ arr[i] ]; end; writeln( 'Lubie is chisel:' ); for i := 1 to n do writeset(i); readln; end. А как сделать, что бы допустим, при вводе чисел проверялось, являються ли они двузначными? И чтобы в ответе выдовал только одну пару чисел и делал запрос на вывод следующей? |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Саня
1. Зачем тебе нужно объявлять массив из 100 элементов, если использоваться будут, скажем, 10 из них... Не лучше ли выделить массив динамически? 2. Цитата А как сделать, что бы допустим, при вводе чисел проверялось, являються ли они двузначными? Код For m:=1 to n do repeat write('a[',m,']= '); readln(arr[m]) until arr[m] in [10 .. 99]; 3. Цитата И чтобы в ответе выдовал только одну пару чисел и делал запрос на вывод следующей? Код writeln( 'Lubie is chisel:' ); for i := 1 to n do begin writeset(i); writeln( 'press enter to print the next set' ) readln; end; end. |
Altair |
![]()
Сообщение
#8
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Век живи, век учись.
Цитата Не лучше ли выделить массив динамически Покажи пожалуйста пример... что-то не понял что ты имеешь ввиду... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Oleg_Z
Вместо: Код var ... arr: array[1 .. maxN] of byte; ... repeat writeln('Vvedite kolichestvo elementov'); readln(n) { допустим, ввели 10 } until n<=MaxN; ... { использование 10 элементов arr (остальные 90 не используются) } я бы сделал так: Код type arrType = array[1 .. 1] of integer; var arr: ^arrType; ... repeat writeln('Vvedite kolichestvo elementov'); readln(n) { допустим, ввели 10 } until n<=MaxN; GetMem( arr, n*sizeof(integer)); { и продоллжаем работать с arr^[i] вместо arr[i] } ... FreeMem( arr, n*sizeof(integer)); |
Altair |
![]()
Сообщение
#10
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
круто ... не знал об этом... намотаю на ус....
![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Саня
У тебя объявлен лишний массив ... Вместо Код var x: array[1 .. maxN] of integer; ... for i := 1 to n do begin x[i] := arr[i] mod 11; nums[ x[i] ] := nums[ x[i] ] + [ arr[i] ]; end; можно сделать так: Код var x: integer; ... for i := 1 to n do begin x := arr[i] mod 11; nums[ x ] := nums[ x ] + [ arr[i] ]; end; Вот к чему приводит Ctrl-V :D |
Guest |
![]()
Сообщение
#12
|
Гость ![]() |
Спасибо volvo
:D :D :D :D |
Саня |
![]()
Сообщение
#13
|
Гость ![]() |
У меня возникло еще пара вопросов (надеюсь я не надоел :D ) :
проверку чисел на двузначность я сделал так Код write('a[',m,']= '); readln(arr[m]); for t:=1 to 3 do begin if ((arr[m]<10)) or ((arr[m]>99)) then begin writeln('Chisla dolzhny byt dvyznach'); write('Vvedite zanovo: a[',m,']='); readln(arr[m]); dec(t); end; Но она 100% работает только с однозначными числами, а с трехзначными - через раз? ![]() И еще, ответ выходит в таком виде: Lubie is chisel: nabor #1 12 - net par press enter to print the next set press enter to print the next set nabor #3 14 36 press enter to print the next set nabor #4 37 48 92 press enter to print the next set ... Нельзя ли сделать так, что бы в ответ выводились только по 2 цифры, и не писалось в противном случае, что нет пар. Заранее благодарен! |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
1.
Код for t:=1 to 3 do begin if ((arr[m]<10)) or ((arr[m]>99)) then begin writeln('Chisla dolzhny byt dvyznach'); write('Vvedite zanovo: a[',m,']='); readln(arr[m]); dec(t); { Внутри цикла изменяется его параметр !!! } end; я же уже писал выше проверку на двузначность числа... чем она не подходит? 2. Цитата Нельзя ли сделать так, что бы в ответ выводились только по 2 цифры Цитата nabor #4 37 48 92 какие именно 2 цифры? 37 и 48? или 48 и 92? а может 37 и 92? по какому критерию выбирать числа? или выводить все возможные перестановки по 2 числа? ![]() |
Саня |
![]()
Сообщение
#15
|
Гость ![]() |
Просто я хотел, что бы, если число не верное, выводилось об эом сообщение, и предложение его исправить.
Нужно что бы выводились все возможные переборы по 2 числа. Примерно так: 37 48 press enter 48 92 press enter 37 92 |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
1.
Цитата если число не верное, выводилось об эом сообщение, и предложение его исправить Код var good: boolean; ... repeat write('a[',m,']= '); readln(arr[m]); good := arr[m] in [10 .. 99]; if not good then writeln('Chisla dolzhny byt dvyznach. Eshe raz...'); until good; 2. Цитата Нужно что бы выводились все возможные переборы по 2 числа Для этого придется переделывать программу полностью... |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Проверь вот это... Я думаю, это - то, что тебе нужно ...
Код type numset = set of byte; const maxn = 15; var arr: array[1 .. maxn] of byte; var x: integer; cnt: array[1 .. maxn] of integer; nums: array[1 .. maxn] of numset; i: integer; procedure writeset(i: integer); var x, count: byte; numbers: array[1 .. maxn] of integer; ii, jj: integer; begin count := 0; for x := 10 to 99 do if x in nums[i] then begin inc(count); numbers[count] := x; end; for ii := 1 to count do for jj := ii + 1 to count do begin writeln( 'para:', numbers[ii], ' ', numbers[jj] ); writeln( 'enter to view next pair' ); readln; end; end; var n: integer; good: boolean; begin repeat writeln('Vvedite kolichestvo elementov'); readln(n) until n <= maxN; for i := 1 to n do begin repeat write('a[',i,']= '); readln(arr[i]); good := arr[i] in [10 .. 99]; if not good then writeln('Chisla dolzhny byt dvyznach. Eshe raz...'); until good; x := arr[i] mod 11; nums[ x ] := nums[ x ] + [ arr[i] ]; inc( cnt[ x ] ); end; writeln; writeln( 'results:' ); writeln; for i := 1 to n do if cnt[i] > 1 then writeset(i); end. |
Саня |
![]()
Сообщение
#18
|
Гость ![]() |
volvo
Это круто!!!!! спасибо, спасибо, спасибо, спасибо !!!!!!! |
Саня |
![]()
Сообщение
#19
|
Гость ![]() |
Не моглибы помочь еще немного?
к этой программе нужно какое ни буудь меню приделать, чтобы там было типа такого - пункты: - Ввод данных в файл; - Запуск самой программы ( в нем запрос имени файла, возможность ввода с клавиатуры или запуск счетчика случайных чисел; когда получен результат запросить сохранить результат в файл или нет); - И пункт Help; ,если не сложно ![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 20:18 |