Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / программа для деления в столбик / 4 сообщений из 4, страница 1 из 1
26.10.2019, 10:31
    #39881850
Aleksandr Shpiljov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
программа для деления в столбик
здравствуйте. написал программу для деления в столбик. программа выдает неправильные результаты деления. не могу понять причину. пожалуйста подск
Код: plaintext
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.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
double pow1(double a, double b);
double extractdigit(double* a, int position, int shift);
void greaterpush(double* a, double * b, int del);
void digittoarray(double a, double * b);
int positsija = 0;
int smeshenije = 0;
int z = 0;
int main(){
	cout << "enter a digit " << endl;
	double digit;
	cin >> digit;
	double zifra;
	zifra = digit;
	int var;
	cout << "vvedi delitel " << endl;
	cin >> var;
	int i = 0;
	while (digit >= pow1(10, i))
		i = i + 1;
	double * ptr=new double[i];
	double * ptr2=new double[i];
	double * ptr3=new double[i];
	i = i - 1;
	double k;
	k = i;
	double zeloje;
	double drobnoje;
	int mn = 0;
	int mnb = i;
	int l = 0;
	while (l <= k){
		drobnoje= modf((digit / pow1(10, i)), &zeloje);
		ptr[l] = zeloje;
		digit = digit - ptr[l] * pow1(10, i);
		l = l + 1;
		i = i - 1;
	}
	double j;
	l = 0;
	while (l<=k){
		ptr2[l] = 0;
		l = l + 1;
	}
	l = 0;
	j = 7;
	digittoarray(zifra, ptr2);
	while (l <= k){
		cout << ptr2[l] << endl;
		l = l + 1;
	}
	l = 0;
	int v = 0;
	int x, y;
	x = 0;
	y = 0;
	while (l <= mnb){
		ptr2[l] = 0;
		l = l + 1;
	}

	int u;
	int w = 0;
	int count = 0;
	l = 0;
	int o=0;
	int s1, s2;
	s1 = 0;
	l = 0;
	while (count < mnb){

		greaterpush(ptr, ptr2, var);
		while (l <= mnb){
			l = l + 1;
		}

		l = l + 1;
		l = 0;
		while (l <= z - 1){
			o = extractdigit(ptr2, 0, l);
			l = l + 1;
		}
		ptr3[count] = o / var;
		w = o - ptr3[count] * var;
		digittoarray(w, ptr2);

		z = 0;
		l = 0;
		count = count + 1;
	}
	

	cout << endl;
	while (l <= mnb){
		cout << ptr3[l] << endl;
		l = l + 1;
	}
	while (1){
		;
	}
	}
double pow1(double a, double b){
	double c = 1;
	double d;
	double i = 1;
	if (b == 0)
		d = 1;
	else if (b != 0){
		while (i <= b){
			c = c*a;
			i = i + 1;
		}
		d = c;
	}
	return d;
}
double extractdigit(double * a, int position, int shift){
	int pos = position;
	int smes = shift;
	double b, c;
	double * pointer = a;
	c = 0;
	int k = position + shift;
	int m = k - pos;
	int l = k - 1;
	while (pos <= k){
		b = pointer[pos] * pow1(10, m);
		c = c + b;
		m = m - 1;
		pos = pos + 1;
	}
	m = 0;
	b = 0;
	return c;
}
void greaterpush(double * a, double * b, int del){
	int delitel = del;
	double c;
	int k = 0;
	double * pointer1 = a;
	double * pointer2 = b;
	while (1){
		c = extractdigit(pointer1, positsija, smeshenije);
		if (c >= delitel){
			digittoarray(c, pointer2);
			positsija = positsija + smeshenije + 1;
			z = smeshenije;
			smeshenije = 0;
			break;
		}
		else if (c < delitel){
			smeshenije = smeshenije + 1;
		}
	}
}
void digittoarray(double a, double * b){
	double chislo;
	chislo = a;
	int i = 0;
	double * pointer = b;
	double c, d;
	int k = 0;
	double zel, drob;
	while (chislo >= pow1(10, i))
		i = i + 1;
	i = i - 1;
	z = 0;
	while (i >= 0){
		while (pointer[k] != 0)
			k = k + 1;
		drob = modf((chislo / pow1(10, i)), &zel) ;
		c = zel;
		pointer[k] = c;
		chislo = chislo - c*pow1(10, i);
		i = i - 1;
		k = k + 1;
		z = z + 1;
	}
}

ажите какие изменения в коде необходимо предпринять.
...
Рейтинг: 0 / 0
26.10.2019, 12:34
    #39881860
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
программа для деления в столбик
Aleksandr Shpiljovне могу понять причину.

Отлаживайся. Проходи программу по шагам и смотри где содержимое переменных начинает
отличаться от того, которое ты ожидаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.10.2019, 16:19
    #39881884
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
программа для деления в столбик
никогда ещё деление в столбик не было такой неделимой простынёй
...
Рейтинг: 0 / 0
26.10.2019, 16:23
    #39881886
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
программа для деления в столбик
Aleksandr Shpiljov, зачем ты используешь double? Твоя задача решается в целых числах.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / программа для деления в столбик / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]