Помощь - Поиск - Пользователи - Календарь
Полная версия: Различные числа и случайный порядок
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
maks
1.
Условие:
Дано натуральное число N (0<N<1000000). Сколько различных цифр встречается в его записи?
Входные данные:
Число N вводиться с клавиатуры
122334
Выходные данные:
На экран выдаётся одно число, которое указывает количество различных цифр в числе 4

2.
Условие:
С клавиатуры вводиться число N (0<N<1000). Расположить числа от 0 до N-1 в случайном порядке. (В результате работы алгоритма любая перестановка чисел может встречаться одинаково часто)
Входные данные:
Число N, введённое с клавиатуры. 10
Выходные данные:
Файл Output.txt с набором чисел от 0 до N-1, записанными через пробел
0 5 2 9 3 7 1 8 4 6
Ivs
Вот первая:
Код

Program Bandy_Round;

Var
  i,j : Integer;                       { Счетчики в циклах                       }
  k   : Integer;                       { Указатель на последний элемент          }
  n   : Integer;                       { Вводимое число                          }
  m   : Integer;                       { Цифра числа N                           }
  r   : Real;                          { Количество различных букв               }
  a   : Array [1..7] of Word;          { Массив цифр числа N                     }

Begin
  Write('Input N (1< N <1000000): ');  { Ввод числа N                            }
  Readln(n);                           { --------------------------------------- }
  i:=1;                                { i указывает на начало массива a         }
  While n <> 0 do                      { Заполнение массива a цифрами числа  N   }
  begin
     m:=n mod 10;                      { Остаток от деления                      }
     n:=n div 10;                      { Сокращаем число на 10                   }
     a[i]:=m;                          { Присваеваем очередному элементу массива }
     Inc(i);                           { Увеличиваем i                           }
  end;
  k:=i-1;                              { В k указатель на последний элемент      }
  for i:=1 to k do
  begin
     n:=0;
     for j:=1 to k do
        if a[i]=a[j] then Inc(n);      { В n количество встреч цифры в массиве   }
     r:=r+1/n;                         { В r эта цифра без других её вхождений   }
  end;
  Write('Output: ',r:0:0);             { Вывод суммарного количества разных цифр }
  ReadKey;                             { Ждем нажатия любой клавиши              }
End.                                    { Завершаем программу                     }

Ivs
Вот вторая:
Код

(******************************)
(*        Перестановки        *)
(* Алгоритм случайной выборки *)
(******************************)

Var
  i    : Integer;                      { Счетчик в цикле                          }
  N    : Integer;                      { Само число                               }
  Temp : Integer;                      { Вспомогательная переменная               }
  k,j  : Integer;                      { Случайные числа                          }
  A    : Array [0..999] of Integer;    { Массив чисел от 0 до N-1                 }
  F    : Text;                         { Файловая переменная                      }

Begin
  Assign(F,'OUTPUT.TXT');              { Связываем файл. переменную с файлом      }
  Rewrite(F);                          { Открываем для записи                     }
  Write('Input N (1<N<1000): ');       { Ввод числа N                             }
  Readln(N);                           { ---------------------------------------- }
  for i:=0 to N-1 do A[i]:=i;          { Заполняем массив A числами от 0 до N-1   }
  for i:=0 to N-1 do                   { Цикл  случайных перестановок             }
  begin                                { Можно увеличить число итераций           }
     k:=Random(N-1);                   { В k случайное число от 0 до N-1          }
     j:=Random(N-1);                   { В j случайное число от 0 до N-1          }
     Temp:=A[k];                       { Обмен значений двух переменных           }
     A[k]:=A[j];                       { ---------------------------------------- }
     A[j]:=Temp;                       { ---------------------------------------- }
  end;
  for i:=0 to N-1 do Write(F,A[i],' ');{ Вывод уже переставленного массива в файл }
  Close(F);                            { Закрываем файл                           }
End.
maks
Спасибо за помощь, а как можно этот текст скопировать в паскаль?
Ivs
Цитата
Спасибо за помощь, а как можно этот текст скопировать в паскаль?

Можно просто открыть TP в оконном режиме, далее скопировать вышеуказанную программу в буфер (как это сделать ты наверное догадываешся), и в том окне (где TP) есть иконка типа символа буфера, так вот тебе её нужно нажать, и тогда текст скопируется в TP, но так вроде коряво выходит, есть еще куча способов, самый простой это скопировать в блокнот и сохранить как файл с расширением .pas, но так он у тебя сохраниться в win кодировке и поэтому некорректно будут отображаться русские символы в TP, есть другой вариант скопировать программу в WordPad дальше в меню Сохранить как необходимо выбрать пункт "как текстовой документ ms-dos" и затем переименовать из .txt -> .pas.
Maks
Вхожу в программу, ввожу число, нажимаю - Enter, а программа выходит в меню и не выдают результата! ???
AlaRic
Перед END напиши READLN.
Ivs
Цитата
Перед END напиши READLN.

Или после завершения жми Alt+F5 и усе увидишь.....
AlaRic
Забыл сказать: в TP 7 приходилось писать readln дважды!
Ivs
Цитата
Забыл сказать: в TP 7 приходилось писать readln дважды!

Почему ???? У меня TP 7 и одного раза хватает...
reill
ТО Ivs
В ТР все переменные одного типа можно резервировать через запятую типа:
i,j,k,n,m  : Integer;
;)
GLuk
По-моему он это и так знает, а сделано было это для наглядности  :P
Сергей
Коллеги, а не подскажете алгоритм случайной выборки из массива?

Есть база, в ней 200 записей.
надо из нее выбрать 40 случайных неповторяющихся.
ozzy
Процедура, случайным образом перемешивающая элементы массива (легко переделывается под Ваш вариант)

Код
var { Глобальные переменные - Фамилия, имя, класс }
 Name    : string;
 SurName : string;
 Class   : string;
Const
 Dimension = 47;
 NumberOfTest = 15;
Type
 DataRecord=Record
   Nomer,Kolvo:Integer;
   Answer:String;
   Category,Number:Integer;
   Stroki:Array [1..9] of String[70];
 end;
 ErrorsArray = Array [1.. Dimension] of Integer;
Var
 MyOIVT :   DataRecord;
 VArray,MyArray,MyErrors : ErrorsArray;
...
Procedure RandomArray (Var A : ErrorsArray;n1,n2:Integer);
Label
 Metka1,Metka2,Metka3;
var
 i,j,t : Integer;

begin
Randomize;
{For i:=1 to n do
 A[i]:=0;}
A[n1]:=Random((n2-n1+1))+n1;
For j:=n1 to n2-1 do
 begin
  Metka2:
   t:=Random((n2-n1+1))+n1;
   i:=n1;
  Metka3:
   if i>j then goto Metka1;
   if t=a[i] then goto Metka2;
   i:=i+1;
   goto Metka3;
   Metka1:
   a[j+1]:=t;
 end;
end;
reill
ПРоцедуры это конечто хорошо, но надо иногда и думать своей головой:
for i:=1 to 40 do a[i]:=b[random(200)];
Вот тебе формирование масива состоящего из 40 елементов, при помощи случайного выбора элементов из другого масива состоящего из 200 элементов... ;D
AlaRic
Про формирование нового массива ничего не говорилось.
reill
;)А тебе нужно чтобы большими буквами было написанно слово ФОРМИРОВАНИЕ???
Случайный выбор 40 елементов чего ты сними делать то хочешь запаминать сам??
Делаешь массив а потом крути как хочешь, хошь печатай, хошь запаминай... все проше  чем его процедура :P
Maks
Условие:
Из цифр двух натуральных чисел составить наибольшее возможное число, сохраняя первоначальную последовательность цифр.

Пример:
111
222
Ответ:
222111
97531
86420
Ответ:
9876543210

2, 3 задачи решение должно быть не файлом input.txt, а вводом с клавиатуры!
Maks
Никто не знает чтоли? ???
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.