Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
112 / 109 / 33
Регистрация: 21.12.2009
Сообщений: 321
1

Для тех кто знает и паскаль и с++

01.05.2010, 21:41. Просмотров 953. Ответов 1
Метки нет (Все метки)


у меня есть программа на с, нужно её на паскаль переписать, просто с этим языком я мало знаком, а так вот все задание а ниже программа написаная на с


[I]Пусть N - числитель, M - знаменатель ( N < M - дробь правильная)
a: N *= 10;
c = N / M; // это очередная цифра
N = N % M;
// Точка истины
goto a;
Если N стало = 0, получилась точная десятичная дробь,
вычисления заканчиваем
Как поймать возникновение периода?
Очевидно, период возникает, как только N повторит одно из своих
предыдущих значений.
Этих значений < M
Поэтому заводим массив int x[M], x[i] - номер шага, на котором N==i
По началу все x = 0.
Останавливаемся тогда, когда x[N] != 0


C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <alloc.h>
Drob(int NN, int M)
{
  long N = NN;   // исходное значение нам еще понадобится
 // Пришлось вместо int использовать long N, т.к. при умножении на 10
 // даже такого небольшего числа, как 3720, N > MAX_INT
  int c, i, step, period, dop, flag;
  int *x;
 
  printf(" %d / %d =\n", NN, M);
  x = (int *)malloc(M * sizeof(int));
  for(i=0; i<M; i++) x[i] = 0;
  step = 1;
  while(1) {
    N *= 10;
    c = N / M;
    N = N % M;
       // Точка истины
    if (N==0) {
      printf("точная десятитичная дробь\n");
      period = 0;
      break;
    }
    if (x[N]!=0) {
      period = step - x[N];
      dop = x[N] - 1;  // Сколько цифр надо печатать до периода
      printf("Периодическая дробь, длина периода = %d dop=%d\n", period, dop);
      break;
    }
    x[N] = step;
    step++;
  }
      // Теперь число печатаем
  printf("0.");
  N = NN;
  i = 0;
  flag = 0;
  while(1) {
    if (flag==0 && period && i >= dop) {
      printf("(");
      flag = 1;  // Флаг - печатаем период
      i = 0;
    }
    N *= 10;
    c = N / M;
    printf("%d", c);
    N = N % M;
    if (N==0) break;
    if (period==0) continue; // Для точной дроби все что ниже - не нужно
    i++;
    if (flag && i >= period) {
      printf(")\n");
      break;
    }
  }
}
/*****************/
main(int argc, char *argv[])
{
   if (argc<3) exit(1);
   Drob(atoi(argv[1]), atoi(argv[2]));
}
/**************/



вот задание:
Даны взаимно простые натуральные числа m и n (m<n). Найти переодическую и непереодическую части десятичной дроби равной m/n.

Заранее спасибо, Вашь Angel-dm)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2010, 21:41
Ответы с готовыми решениями:

Для тех кто знает рогалики
Есть рогалики которые запускаются в окне (ADOM, DF), но графика, как в консоли ASCII-шная. Я...

Для тех, кто знает DBMS_SQL
Задача: обновить данные в табличке. Название таблички известно (например, test_1), а вот количество...

Процедуры в С++ (для тех, кто знает и Pascal, и C++)
Недавно начал учить С++ и столкнулся с такой вещью. Из того, что я понял, у С++ есть только...

Java FAQ: для тех кто знает (учил) С/С++
1. Строки сравниваются не при помощи оператора == а при помощи метода equals (&quot;a&quot; == &quot;a&quot;) == true...

1
538 / 443 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
02.05.2010, 01:05 2
вообще-то, это не C++, а просто C...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2010, 01:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

для тех кто знает что такое МАН
решил написать в этом году МАН. Подскажите тему. Ну точнее хочу на МАН написать программу на винду,...

Сортировка вектора сложного класса (Просто для тех кто знает)
Есть класс: class Tovar { protected: Date_class expiry; string articul, name,...

Кто хорошо знает Паскаль,отзовитесь!
Кто знает очень хорошо Паскаль,отзовитесь,пожалуйста!

Паскаль , кто знает как составить уравнение в нём и сделать в электронном виде
пожалуйста сможет кто решить уравнение в паскале неделю бился не могу до сих пор , а сдавать уже по...

Как система Windows узнает дату и время?(Прошу ответить тех, кто знает, а не школоту!)
Привет, всем. У меня, в целях успокоить мою любопытную голову, задался такой вопрос: Как система...

Кто знает формулу для sin(kx)?
Кто знает, как выразить \sin (kx) через сумму синусов и косинусов от x? k - однозначно натуральное


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

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

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