Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2019, 19:49   #1
veof
Новичок
Джуниор
 
Регистрация: 25.10.2019
Сообщений: 1
По умолчанию программа для деления в столбик

здравствуйте. пытаюсь разработать программу для деления в столбик. программа при вычислении выдает неправильный результат. какие исправления в коде надо предпринять?
Код:
#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;
		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;
	}
}
veof вне форума Ответить с цитированием
Старый 27.10.2019, 23:09   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

А что говорит отладчик?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод половинного деления. вылетает программа 1ViV1 Qt и кроссплатформенное программирование С/С++ 0 14.07.2016 21:25
Язык си. Операция деления, двоичная маска без деления nataqwest Помощь студентам 4 06.03.2015 16:44
программа деления с остатком ideaworks Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.04.2013 18:53
программа не правильно выполняет последнюю операцию деления a4 / (-a3) VasyaMisterX Помощь студентам 0 15.04.2013 23:48
Программа считывает заданый столбик в файле. thelasthero2011 Паскаль, Turbo Pascal, PascalABC.NET 3 01.10.2012 13:04