Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 18:32   #1
ALEX_АНДр
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию Обработка массивов данных

Перечислить все числа заданной последовательности чисел, которые состоят из тех же цифр, что и первое.

Помогите, пожалуйста, написать программу, очень надо до завтра,...
ALEX_АНДр вне форума Ответить с цитированием
Старый 23.03.2009, 18:32   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Свои мысли есть?
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 23.03.2009, 19:21   #3
ALEX_АНДр
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

насколько я понял, здесь нужно задать произвольную последовательность чисел, к примеру от 123 до 1650, и надо в этой последовательности найти такие числа, которые содержат цифры 1, 2, 3......Я не знаю как это оформить в программу, потому что массив ещё не изучал, а лабу надо завтра сдать(( *так вот нам сделали нехорошо(((*........Если в кратце объясните, а если ище и напишете , то буду очень признателен!!!
ALEX_АНДр вне форума Ответить с цитированием
Старый 23.03.2009, 19:39   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Я понял так: найти числа которые состоят из цифр первого числа

Код:
uses crt;
const n=150;
var a:array[1..n] of integer;
    s,s1:set of 0..9;
    i,j,temp:integer;
    
begin
clrscr;
randomize;
a[1]:=random(99)+1;
write(a[1],' ');
for i:=2 to n do
 begin
   a[i]:=random(1000)+1;
   write(a[i],' ');
 end;
temp:=a[1];
s:=[];
while temp<>0 do
 begin
  s:=s+ [temp mod 10];
  temp:=temp div 10;
 end;
 writeln;
 writeln('Numbers:');
 for i:=2 to n do
  begin
   s1:=[];
   temp:=a[i];
   while (temp<>0)  do
    begin
      j:=temp mod 10;
      s1:=s1+[j];
      temp:= temp div 10;
    end;
   if (s1-s=[])and(s-s1=[]) then writeln(a[i]);
  end;
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 23.03.2009, 19:49   #5
ALEX_АНДр
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

да, именно так, числа, состоящие из цифр первого числа, ты правильно понял.......СПАСИБО ОГРОМНОЕ!!! выручил очень.....я до такого не додумался бы сам(........

теперь буду внимать, чтобы понять, что есть что.......

Уважаемый, alex_fcsm, не мог бы ты пояснить мне свою программу....никак не могу разобраться(

lДо раздела переменных, что означает запись : uses crt;
const n=150;
в разделе переменных описываем массив, состоящий из n индексов, где тип элементов целый....
что означает следующая строчка: s, s1 : set of 1..9
что значит temp

Дальше с циклами я не понимаю, что они делают(( можешь рассказать, что за что отвечает??? ...

Запускаю программу, а там кроме вывода около сорока а[i]....., а после NUMBERS:_ нет(((, как это исправить??

Последний раз редактировалось Stilet; 24.03.2009 в 08:41.
ALEX_АНДр вне форума Ответить с цитированием
Старый 24.03.2009, 00:49   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

uses crt - используем процедуру (clrscr - очистка экрана) из этого модуля
const n=150 - задаем для удобства константу. Согласись что гораздо проще подписать n=200 чем потом по всей программе исправлять 150 на 200.
set of 0..9 - задаем множество, элементами которого являются
целые числа 0,1,2,3,4,5,6,7,8,9
temp - переменная служащая для временного хранения(можешь как угодно назвать мне понравилось так)

Код:
a[1]:=random(99)+1;
write(a[1],' ');
for i:=2 to n do
 begin
   a[i]:=random(1000)+1;
   write(a[i],' ');
 end
заполняем последовательность случайными числами

Код:
temp:=a[1];
s:=[];
while temp<>0 do
 begin
  s:=s+ [temp mod 10];
  temp:=temp div 10;
 end;
Здесь определяем цифры первого числа последовательности
1. Для этого используем mod и div
Пока temp(в котором содержится первый элемент последовательности) не равно 0 ищем остаток от деления на 10, а затем уже берем не само число а результат целочисленного деления на 10
Например:987
temp:=987;
s:=[];
s:=s+[(987 mod 10)=7] - остаток от деления на 10 s становится [7]
temp:=987 div 10 temp становится 98
s:=[7]+[(98 mod 10)=8] s становится [7,8]
temp:=98 div 10 temp становится 9
s:=[7,8] +[9 mod 10=9] s становится [7,8,9]
temp:=9 div 10=0 - условие выхода из цикла
Множество цифр первого числа сформировано и оно равно s
Затем в цикле составляем множества для других чисел
Код:
 for i:=2 to n do
  begin
   s1:=[];
   temp:=a[i];
   while (temp<>0)  do
    begin
      j:=temp mod 10;
      s1:=s1+[j];
      temp:= temp div 10;
    end;
   if (s1-s=[])and(s-s1=[]) then writeln(a[i]);
  end;
Принцип действия такой же только составляем s1
Строка
Код:
if (s1-s=[])and(s-s1=[]) then writeln(a[i]);
означает: если все цифры i- ого числа содержатся в цифрах 1-ого числа
(s1-s=[]) и все цифры 1- ого числа содержатся в цифрах i-ого числа (s-s1=[]) то мы нашли это число


По поводу того что ничего не выводится : совпадений будет очень мало. Запускай несколько раз

P.S. После запуска смотри результат: подпиши перед самым концом (end.)
Код:
readln;
P.P.S. Фигасе быстрый ответ получился
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 06.04.2009, 18:59   #7
ALEX_АНДр
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 14
По умолчанию

Спасибо огромное, сдал...все норм!!!
ALEX_АНДр вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование и обработка массивов (pascal) deceiver Помощь студентам 5 17.03.2009 17:38
обработка одномерных массивов felmor Помощь студентам 16 05.02.2009 19:22
Обработка массивов. C++ for DOS. slog Помощь студентам 0 09.12.2008 17:34
Обработка массивов данных Pascal Igor571 Помощь студентам 4 01.12.2008 11:05