IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Выбор из двузначных чисел, Задача
сообщение
Сообщение #1


Гость






Такая задача: "Выбор из двузначных чисел". Даны n (n>=12) различных двузначных чисел. Написать программу выбора из них двух чисел так, чтобы их разность давала двузначное число, записываемое двумя одинаковыми числами.

У меня ни как не получаеться sad.gif sad.gif sad.gif Может у кого нибудь получится....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
У меня ни как не получаеться


Значит, пробовал? Какие есть идеи? Исходники (если есть) - в студию...
:D
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Идеи просто кончилисьsad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


Набирал без компилятора, так что могут быть ошибки ... Проверь ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


синтаксических ошибок нет. smile.gif
Цитата
Написать программу выбора из них двух чисел

так надо всего 2 числа произвольных таких указать, или все пары чисел, удовлетворяющих этому правилу?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

А как сделать, что бы допустим, при вводе чисел проверялось, являються ли они двузначными? И чтобы в ответе выдовал только одну пару чисел и делал запрос на вывод следующей?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Век живи, век учись.
Цитата
Не лучше ли выделить массив динамически

Покажи пожалуйста пример... что-то не понял что ты имеешь ввиду...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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));

 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


круто ... не знал об этом... намотаю на ус.... smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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% работает только с однозначными числами, а с трехзначными - через раз? unsure.gif

И еще, ответ выходит в таком виде:
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 цифры, и не писалось в противном случае, что нет пар.
Заранее благодарен!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 числа? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Просто я хотел, что бы, если число не верное, выводилось об эом сообщение, и предложение его исправить.

Нужно что бы выводились все возможные переборы по 2 числа.
Примерно так:
37 48
press enter
48 92
press enter
37 92
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 числа

Для этого придется переделывать программу полностью...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
,если не сложно huh.gif huh.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.09.2025 20:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name