My favorites | Sign in
Project Home Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
  Advanced search   Search tips   Subscriptions

Issue 24 attachment: Div.java.patch (6.8 KB)

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
--- trunk/Igor Bugun/Div.java
+++ trunk/Igor Bugun/Div.java
@@ -6,7 +6,7 @@
import java.util.Scanner;
public class Div {

- static int MinDiv(int den, int length, int...mas) { //ищем наименьшее число, которое содержится в делимом и которое больше или равно делимого
+ static int MinDividende(int den, int length, int...mas) { //ищем наименьшее число, которое содержится в делимом и которое больше или равно делимого
int mindiv=0;

if (mas[0]>=den) mindiv=mas[0];
@@ -17,6 +17,7 @@
}
return mindiv;
}
+
public static void PrintSym(int number, String symbol){ //добавляет отступы для красивого вывода
for (int i = 0; i <number ; i++) {
System.out.print(symbol);
@@ -24,63 +25,71 @@
}
}

-public static void main(String[] args)
-throws java.io.IOException {
+ public static int GetParamAndPrint(String msg){ //выводит на экран сообщение и принимает значения делимого и делителя
+ Scanner in = new Scanner(System.in);
+ System.out.println(msg);
+ int a=in.nextInt(); //ввод числа а
+ //in.close();
+ return a;
+ }
+
+ public static void DivideAndPrintResult(int Dividende, int Divisor){ //метод реализующий деление в столбик с выводом на экран
byte znak;
- Scanner in = new Scanner(System.in);
-
- System.out.println("Введите целочисленное значение делимого");
- int A=in.nextInt(); //ввод числа а
-
- System.out.println("Введите целочисленное значение делителя");
- int B=in.nextInt(); //ввод числа b
-
- int l = String.valueOf(A).length();
+ int LengthDividende = String.valueOf(Dividende).length();

- System.out.println(" "+A+" | "+B);
- PrintSym(l+2," "); System.out.print("|"); PrintSym(String.valueOf(A/B).length(),"-"); System.out.println();
- PrintSym(l+2," "); System.out.print("| "); System.out.println(A/B);
+ System.out.println(" "+Dividende+" | "+Divisor);
+ PrintSym(LengthDividende+2," "); System.out.print("|"); PrintSym(String.valueOf(Dividende/Divisor).length(),"-"); System.out.println();
+ PrintSym(LengthDividende+2," "); System.out.print("| "); System.out.println(Dividende/Divisor);

- if (((A<0)&(B>0)) | ((A<0)&(B<0))) { //проверка на знак
- B=-B;
- A=-A;
+ if (((Dividende<0)&(Divisor>0)) | ((Dividende<0)&(Divisor<0))) { //проверка на знак
+ Divisor=-Divisor;
+ Dividende=-Dividende;
}

- int am[] = new int[l];
+ int DividendeArray[] = new int[LengthDividende];

- for (int i=0, a=A;i<l;i++) { //разбиваем число на цифры и записываем в масив
- am[l-i-1] = a%10;
- a= (int) a/10;
+ for (int i=0, a=Dividende, BASE=10;i<LengthDividende;i++) { //разбиваем число на цифры и записываем в масив
+ DividendeArray[LengthDividende-i-1] = a%BASE;
+ a= (int) a/BASE;
}


- int z=MinDiv(B,l,am);
- int pos=String.valueOf(z).length()-1;//порядочный номер, на котором закончился перебор mindiv
+ int MinDividende=MinDividende(Divisor,LengthDividende,DividendeArray);
+ int Position=String.valueOf(MinDividende).length()-1;//порядочный номер, на котором закончился перебор mindiv

- int res[]=new int[l-pos];
- res[0] = (int) z/B;
+ int Result[]=new int[LengthDividende-Position];
+ Result[0] = (int) MinDividende/Divisor;

- System.out.print(-res[0]*B); System.out.println();
- PrintSym(l,"-"); System.out.println();
- int p=String.valueOf(z).length();
+ System.out.print(-Result[0]*Divisor); System.out.println();
+ PrintSym(LengthDividende,"-"); System.out.println();
+ int p=String.valueOf(MinDividende).length();

- for (int i1=1; i1<(l-pos);i1++) { //целочисленая часть
- int z1 = (z-res[i1-1]*B)*10+am[pos+i1];
- res[i1] = (int) z1/B;
- PrintSym(p+i1-1," "); System.out.println((z-res[i1-1]*B)+""+am[i1+pos]);
- PrintSym(p+i1-2," "); System.out.println(("-"+res[i1]*B));
- PrintSym(l,"-"); System.out.println();
+ for (int i1=1; i1<(LengthDividende-Position);i1++) { //целочисленая часть
+ int z1 = (MinDividende-Result[i1-1]*Divisor)*10+DividendeArray[Position+i1];
+ Result[i1] = (int) z1/Divisor;
+ PrintSym(p+i1-1," "); System.out.println((MinDividende-Result[i1-1]*Divisor)+""+DividendeArray[i1+Position]);
+ PrintSym(p+i1-2," "); System.out.println(("-"+Result[i1]*Divisor));
+ PrintSym(LengthDividende,"-"); System.out.println();

- z=z1;
+ MinDividende=z1;
}

int sum=0; //делаем число из масива цифр
- for (int i=0; i<(l-pos); i++) {
- sum = (int) (sum+res[i]*Math.pow(10, l-i-1-pos));
+ for (int i=0; i<(LengthDividende-Position); i++) {
+ sum = (int) (sum+Result[i]*Math.pow(10, LengthDividende-i-1-Position));
}

- System.out.println(" "+A%B);
- System.out.println(A+"|_"+B+" = частное "+sum);
- System.out.println("остаток от деления = "+A%B);
+ System.out.println(" "+Dividende%Divisor);
+ System.out.println(Dividende+"|_"+Divisor+" = частное "+sum);
+ System.out.println("остаток от деления = "+Dividende%Divisor);
+ }
+
+public static void main(String[] args)
+throws java.io.IOException {
+
+ int Dividende = GetParamAndPrint("Введите целочисленное значение делимого");
+ int Divisor = GetParamAndPrint("Введите целочисленное значение делителя");
+ DivideAndPrintResult(Dividende,Divisor);
+
}
}
Powered by Google Project Hosting