Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Различные числа и случайный порядок
Автор: maks 27.03.2003 13:40
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 27.03.2003 16:21
Вот первая:
Код
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 27.03.2003 16:53
Вот вторая:
Код
(******************************)
(* Перестановки *)
(* Алгоритм случайной выборки *)
(******************************)
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 5.04.2003 15:17
Спасибо за помощь, а как можно этот текст скопировать в паскаль?
Автор: Ivs 5.04.2003 16:18
Цитата
Спасибо за помощь, а как можно этот текст скопировать в паскаль?
Можно просто открыть TP в оконном режиме, далее скопировать вышеуказанную программу в буфер (как это сделать ты наверное догадываешся), и в том окне (где TP) есть иконка типа символа буфера, так вот тебе её нужно нажать, и тогда текст скопируется в TP, но так вроде коряво выходит, есть еще куча способов, самый простой это скопировать в блокнот и сохранить как файл с расширением .pas, но так он у тебя сохраниться в win кодировке и поэтому некорректно будут отображаться русские символы в TP, есть другой вариант скопировать программу в WordPad дальше в меню Сохранить как необходимо выбрать пункт "как текстовой документ ms-dos" и затем переименовать из .txt -> .pas.
Автор: Maks 6.04.2003 16:00
Вхожу в программу, ввожу число, нажимаю - Enter, а программа выходит в меню и не выдают результата! ???
Автор: AlaRic 6.04.2003 16:16
Перед END напиши READLN.
Автор: Ivs 6.04.2003 16:33
Цитата
Перед END напиши READLN.
Или после завершения жми Alt+F5 и усе увидишь.....
Автор: AlaRic 6.04.2003 16:54
Забыл сказать: в TP 7 приходилось писать readln дважды!
Автор: Ivs 6.04.2003 23:27
Цитата
Забыл сказать: в TP 7 приходилось писать readln дважды!
Почему ???? У меня TP 7 и одного раза хватает...
Автор: reill 8.04.2003 9:04
ТО Ivs
В ТР все переменные одного типа можно резервировать через запятую типа:
i,j,k,n,m : Integer;
;)
Автор: GLuk 8.04.2003 9:25
По-моему он это и так знает, а сделано было это для наглядности :P
Автор: Сергей 14.04.2003 19:24
Коллеги, а не подскажете алгоритм случайной выборки из массива?
Есть база, в ней 200 записей.
надо из нее выбрать 40 случайных неповторяющихся.
Автор: ozzy 15.04.2003 8:11
Процедура, случайным образом перемешивающая элементы массива (легко переделывается под Ваш вариант)
Код
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 15.04.2003 8:48
ПРоцедуры это конечто хорошо, но надо иногда и думать своей головой:
for i:=1 to 40 do a[i]:=b[random(200)];
Вот тебе формирование масива состоящего из 40 елементов, при помощи случайного выбора элементов из другого масива состоящего из 200 элементов... ;D
Автор: AlaRic 15.04.2003 14:11
Про формирование нового массива ничего не говорилось.
Автор: reill 15.04.2003 20:52
;)А тебе нужно чтобы большими буквами было написанно слово ФОРМИРОВАНИЕ???
Случайный выбор 40 елементов чего ты сними делать то хочешь запаминать сам??
Делаешь массив а потом крути как хочешь, хошь печатай, хошь запаминай... все проше чем его процедура :P
Автор: Maks 16.04.2003 18:13
Условие:
Из цифр двух натуральных чисел составить наибольшее возможное число, сохраняя первоначальную последовательность цифр.
Пример:
111
222
Ответ:
222111
97531
86420
Ответ:
9876543210
2, 3 задачи решение должно быть не файлом input.txt, а вводом с клавиатуры!
Автор: Maks 24.04.2003 16:07
Никто не знает чтоли? ???