Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Светлана0078
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 3
#1

Необходимо перевести программу с Pascal ABC на free pascal

23.11.2015, 17:55. Просмотров 847. Ответов 11
Метки нет (Все метки)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var a, factorial:longint;
const c:array [0..1] of char= ('0','1');
var res:string;
    d:0..1;
    k, n, i:byte;
    begin
        assign(input, 'input.txt');
    assign(output, 'output.txt');
    reset(input);
    rewrite(output);
    readln(n);
     factorial := 1;
     for i:=2 to n do
        factorial := factorial * i;
     a:=factorial;
res:='';
k:=0;
while a<>0 do 
 begin
  d:=a mod 2;
  if d=0 then k:=k+1;
  res:=c[d]+res;
  a:=a div 2;
 end;
write(k);
readln
 end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2015, 17:55
Ответы с готовыми решениями:

Как перевести программу с PascalABC.NET в Free Pascal
program post; uses crt; const nmax=100; var i,j,k,n,m,s,p,n1: integer; a:...

Перевести в Free Pascal с Delphi
unit Unit1; interface uses Windows, SysUtils, Forms, StdCtrls,...

Есть ли аналог модуля tpdate.tpu (Turbo Pascal) для Free Pascal
Внимание! Нужно срочно узнать название юнита для freepascal, который выполняет...

В Turbo Pascal при нажатии на Run ничего не происходит, а в Free Pascal окно сразу же закрывается
Привет всем! У меня такая небольшая проблемка... Я установил Turbo Pascal и...

Программа на Turbo Pascal не запускается на Free Pascal
В теории должен быть симулятор перекрестка, приведенный ниже код работает через...

11
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 18:17 #2
Можно ничего не делать, можно немного причесать:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const
  c: array [0..1] of char = ('0','1');
var
  a, factorial: Longint;
  res: String;
  d: 0..1;
  k, n, i: Byte;
begin
  Assign(input, 'input.txt');
  Assign(output, 'output.txt');
  Reset(input);
  Rewrite(output);
  Readln(n);
  factorial:=1;
  for i:=2 to n do
    factorial:=factorial*i;
  a:=factorial;
  res:='';
  k:=0;
  while a<>0 do begin
    d:=a mod 2;
    if d=0 then k:=k+1;
    res:=c[d]+res;
    a:=a div 2;
  end;
  Write(k);
  ReadLn
end.
Добавлено через 49 секунд
А какое было задание?

Добавлено через 5 минут
Посчитать количество 0 в двоичном представлении n! ?
Тогда можно выкинуть лишнее:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  f: Longint;
  n, k: Byte;
begin
  Assign(input,'input.txt'); Assign(output,'output.txt');
  Reset(input); Rewrite(output);
  ReadLn(n); f:=1;
  for n:=2 to n do f:=f*n;
  while f<>0 do begin
    if f mod 2=0 then Inc(k);
    f:=f div 2;
  end;
  WriteLn(k);
end.
0
Светлана0078
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 3
23.11.2015, 18:24  [ТС] #3
Сколько же нулей?

Миша ходит на кружок по информатике. Там он впервые услышал про «факториал» и про то, как его вычислить. Он узнал, что 2! = 1·2 = 2, а 3! = 1·2·3 = 6. Правда, он не понял, почему 0! = 1.

Там же он научился записывать натуральные числа в двоичной системе счисления. Оказалось, что в двоичной записи обычные числа выглядят совсем по-другому. Например, обычная двойка в двоичной системе счисления превращается в «10», а шестерка – в «110».

Требуется узнать, сколькими нулями оканчивается «факториал» заданного числа, если его записать в двоичной системе счисления.

Формат входных данных

В единственной строке входного файла input.txt записано целое неотрицательное число N, причем 0 ≤ N ≤ 109.

Формат выходных данных

В единственной строке выходного файла output.txt должно быть записано целое неотрицательное число – количество «нулей», идущих подряд в конце двоичной записи числа N!

Добавлено через 44 секунды
ответ система не принимает

Добавлено через 1 минуту
«Компилятор» - Free Pascal Compiler 2.4.0;
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 19:37 #4
Цитата Сообщение от Светлана0078 Посмотреть сообщение
оканчивается «факториал» заданного числа, если его записать в двоичной системе счисления.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  f: Longint;
  n, k: Byte;
begin
  Assign(input,'input.txt'); Assign(output,'output.txt');
  Reset(input); Rewrite(output);
  ReadLn(n); f:=1;
  for n:=2 to n do f:=f*n;
  while (f<>0) and (f mod 2=0) do begin
    Inc(k); f:=f div 2;
  end;
  WriteLn(k);
end.
Вот только не все так просто, как было в вашем исходнике, потому как "0 ≤ N ≤ 109" наверняка звучало как "0 ≤ N ≤ 109", и нужно писать длинную арифметику.
0
Ромаха
235 / 127 / 27
Регистрация: 16.12.2012
Сообщений: 576
Записей в блоге: 1
Завершенные тесты: 1
23.11.2015, 19:42 #5
Цитата Сообщение от bormant Посмотреть сообщение
f:=f*n;
Пффф
Так как бэ 10^9. да и при 109 не зайдет
И длинка как бэ не нужна
да и не поможет она вам
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 19:44 #6
Но даже 109! -- это 177-значное число. Выходит, нужно искать закономерности в получении последних цифр такого числа.
0
Светлана0078
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 3
23.11.2015, 19:47  [ТС] #7
Да была степень 10 в 9степени. Я только начинающий программист, поэтому плохо разбираюсь
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 19:48 #8
Ромаха,
в исходном сообщении было приведено решение без условия в нативной арифметике. Пример выше показывает, как то же самое должно было бы выглядеть не для общего количества 0, а для подсчета последних 0 при тех же допущениях, что и исходный код.

А длинная арифметика, да, тут не поможет, только закономерности в произведениях.
0
Ромаха
235 / 127 / 27
Регистрация: 16.12.2012
Сообщений: 576
Записей в блоге: 1
Завершенные тесты: 1
23.11.2015, 19:55 #9
Да никаких закономерностей тут нет. Самое обычное деление на два и дальше по списку
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 20:03 #10
Цитата Сообщение от Ромаха Посмотреть сообщение
никаких закономерностей тут нет
Умножаете на число с последней цифрой 2 (102), получаете +0 на хвосте, умножаете на число с последней 4 (1002), получаете +00 на хвосте, ...

Уверены, что все 109 нужно перебрать, чтобы подсчитать нули, или возможно сократить перебор?
0
Ромаха
235 / 127 / 27
Регистрация: 16.12.2012
Сообщений: 576
Записей в блоге: 1
Завершенные тесты: 1
23.11.2015, 20:28 #11
Лучший ответ Сообщение было отмечено Новичок как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  f: Longint;
  n, k: Byte;
begin
  ReadLn(n); f:=2;
  while (n >= f) do
  begin
    Inc(k, n div f);
    f := f*2;
  end;
  
  WriteLn(k);
end.
Не уж-то эт так сложно?

Добавлено через 1 минуту
Ток типы нормально выкрутить
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3800 / 2485 / 2051
Регистрация: 22.11.2013
Сообщений: 6,912
23.11.2015, 20:46 #12
Pascal
1
2
var
  f, n, k: Longint;
0
23.11.2015, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2015, 20:46

Чем Turbo Pascal отличается от Free Pascal
Обьясните, пожалуйста, чем Turbo Pascal отличается от Free Pascal? Заранее...

Не играют звуки в Turbo Pascal и Free Pascal
Uses CRT; Procedure mi; Begin sound(659); Delay(500); nosound; Delay(20);...

Напишите рабочую программу free pascal
Можете помочь написать полный код программы,чтобы работал в паскале? Чему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru