powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / программа для деления в столбик
4 сообщений из 4, страница 1 из 1
программа для деления в столбик
    #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
программа для деления в столбик
    #39881860
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Shpiljovне могу понять причину.

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


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