Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program laboratornaya3_2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- type
- TPrimeNumbers = array of Boolean;
- procedure InitArray(var PrimeNumbers: TPrimeNumbers; Size: Integer);
- var
- i: Integer;
- begin
- SetLength(PrimeNumbers, Size);
- for i := 0 to High(PrimeNumbers) do
- PrimeNumbers[i] := True;
- end;
- procedure RemoveDivisibleNumbers(var PrimeNumbers: TPrimeNumbers;
- Divisor: Integer);
- var
- i: Integer;
- begin
- i := Divisor * 2 - 1;
- while(i <= High(PrimeNumbers)) do
- begin
- PrimeNumbers[i] := False;
- i := i + Divisor;
- end;
- end;
- procedure PutData(PrimeNumbers: TPrimeNumbers);
- var
- i: Integer;
- begin
- i := 0;
- Write(2, ' ');
- while(i < High(PrimeNumbers)) do
- begin
- if PrimeNumbers[i] then
- Write(i + 1, ' ');
- i := i + 2;
- end;
- end;
- function FindingPrimeNumbers(Number: Integer): TPrimeNumbers;
- var
- i: Integer;
- PrimeNumbers: TPrimeNumbers;
- begin
- InitArray(PrimeNumbers, Number);
- PrimeNumbers[0] := False;
- i := 3;
- while(i < High(PrimeNumbers) div 2 + 1) do
- begin
- if PrimeNumbers[i - 1] then
- RemoveDivisibleNumbers(PrimeNumbers, i);
- i := i + 2;
- end;
- FindingPrimeNumbers := PrimeNumbers;
- end;
- procedure OutputToNewFile(Number: Integer);
- var
- FileName: String;
- Output: TextFile;
- PrimeNumbers: TPrimeNumbers;
- i: integer;
- begin
- Write('Введите имя для нового файла: ');
- Readln(FileName);
- AssignFile(Output, FileName);
- Rewrite(Output);
- Writeln(Output,'Все простые числа, не превосходящие числа ',Number,': ');
- PrimeNumbers := FindingPrimeNumbers(Number);
- begin
- i := 0;
- Write(Output, 2, ' ');
- while(i <= High(PrimeNumbers)) do
- begin
- if PrimeNumbers[i] then
- Write(Output, i + 1, ' ');
- i := i + 2;
- end;
- end;
- CloseFile(Output);
- Writeln('Ответ записан в файл ', FileName);
- end;
- procedure OutputToExistFile(FileName: String; Number: Integer);
- var
- Output: TextFile;
- PrimeNumbers: TPrimeNumbers;
- i: integer;
- begin
- AssignFile(Output, FileName);
- Rewrite(Output);
- Writeln(Output, 'Все простые числа, не превосходящие числа ',Number,': ');
- PrimeNumbers := FindingPrimeNumbers(Number);
- begin
- i := 0;
- Write(Output, 2, ' ');
- while(i <= High(PrimeNumbers)) do
- begin
- if PrimeNumbers[i] then
- Write(Output, i + 1, ' ');
- i := i + 2;
- end;
- end;
- CloseFile(Output);
- Writeln('Ответ записан в файл ', FileName);
- end;
- procedure ChekExistFile(Number: Integer);
- var
- FileName: String;
- Output: TextFile;
- IsCorrect: boolean;
- begin
- repeat
- Write('Введите имя существующего файла для записи: ');
- Readln(FileName);
- if FileExists(FileName) then
- begin
- IsCorrect:= True;
- OutputToExistFile(FileName, Number);
- end
- else
- begin
- Writeln('Вы ввели несуществующий файл. Попробуйте ещё раз!');
- IsCorrect:= False;
- end;
- until IsCorrect;
- end;
- procedure ChooseOutputFile(Number: Integer);
- var
- Sign: String;
- IsCorrect: boolean;
- begin
- repeat
- Write('Введите "1", чтобы выбрать существующий файл для записи, или "2", чтобы создать новый: ');
- begin
- Readln(Sign);
- IsCorrect:= True;
- if Sign = '1' then
- ChekExistFile(Number)
- else
- if Sign = '2' then
- OutputToNewFile(Number)
- else
- begin
- IsCorrect:= False;
- Writeln('Вы ввели неверное значение. Пожалуйста попробуйте ещё раз.');
- end;
- end;
- until IsCorrect;
- end;
- procedure InputFromeFile(FileName: String);
- var
- Input: TextFile;
- Number: Integer;
- PrimeNumbers: TPrimeNumbers;
- begin
- AssignFile(Input, FileName);
- Reset(Input);
- while not Eof(Input) do
- begin
- Read(Input, Number);
- Writeln('Ваше натуральное число: ',Number);
- end;
- CloseFile(Input);
- Write('Все простые числа, не превосходящие числа ',Number,': ');
- PutData(FindingPrimeNumbers(Number));
- Writeln('');
- ChooseOutputFile(Number);
- end;
- procedure ChekInputFromeFile();
- var
- FileName: String;
- Input:TextFile;
- IsCorrect: boolean;
- begin
- repeat
- Write('Введите имя вашего файла, с которого вы хотите ввести число: ');
- Readln(FileName);
- if FileExists(FileName) then
- //Можно вставить процедуру проверки на пустой файл.
- IsCorrect:= True
- else
- begin
- IsCorrect:= False;
- Writeln('Вы ввели неверное имя. Пожалуйста попробуйте ещё раз!');
- end;
- until IsCorrect;
- InputFromeFile(FileName);
- end;
- procedure InputFromeKonsole;
- var
- Number: Integer;
- PrimeNumbers: TPrimeNumbers;
- begin
- Write('Введите ваше натуральное число для нахождения всех простых чисел, не превосходящих его: ');
- Readln(Number);
- Write('Все простые числа, не превосходящие числа ',Number,': ');
- PutData(FindingPrimeNumbers(Number));
- end;
- procedure ChooseKonsoleOrFile;
- var
- Letter: String;
- IsCorrect: boolean;
- begin
- repeat
- Write('Пожалуйста, введите "Ф" , если хотеите ввести число из файла, или введите "К", если хотите ввести из консоли: ');
- begin
- Readln(Letter);
- IsCorrect:= True;
- if Letter = 'Ф' then
- ChekInputFromeFile
- else
- if Letter = 'К' then
- InputFromeKonsole
- else
- begin
- IsCorrect:= False;
- Writeln('Извините, вы можете ввести только Ф или К. Попробуйте еще раз!');
- end;
- end;
- until IsCorrect;
- end;
- procedure Main;
- var
- PrimeNumbers: TPrimeNumbers;
- Number: Integer;
- begin
- Writeln('Эта программа находит все простые числа, не превосходящие данного натурального числа P.');
- ChooseKonsoleOrFile;
- Readln;
- end;
- begin
- Main;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement