Форум программистов, компьютерный форум CyberForum.ru

Интервалы. Где дыра в алгоритме ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Всё просто http://www.cyberforum.ru/cpp-beginners/thread207452.html
Напечатать все простые числа, не провосходящее заданое число М..... вот код #include <iostream> #define N 150 int main(void)
C++ Массивы Одномерный массив-Вычислить среднее арифметическое элементов массива Х, расположенных между его минимальным и максимальным значениями. Если минимальный элемент размещается в массиве раньше максимального, то упорядочить массив на данном промежутке по возрастанию его элементов (возможна и обработка ситуации). Двумерный массив-В массиве целых чисел поменять местами минимальный и максимальный... http://www.cyberforum.ru/cpp-beginners/thread207446.html
C++ Код Хэмминга кодер-декодер
Требуется создать кодер-декодер по коду Хэмминга. Почитал, вроде ничего сложного. Теперь надо написать.
Определить значения и адреса элементов массива, вычисляемых по формуле C++
Определить значения и адреса элементов массива, вычисляемых по формуле х(катое)=а(в степени к)/к(факториал).
C++ ВЫЧИСЛЕНИЕ ИНТЕГРАЛА http://www.cyberforum.ru/cpp-beginners/thread207428.html
пОМОГИТЕ С ПРОГРАММОЙСоставить таблицу значений следующей функции: ∫_0^x▒√(1+2t^2 )dt Здесь аргумент принимает значения от 1 до 2 с шагом h=0.05
C++ матрица, и вывод из\в фаил не работает так как хотелось бы(, а в чем проблемы я не могу понять((, когда начинает считать матрицу введенную с клавиатуры, просто берет и вылетает, а ошибки как таковой я не нахожу(. пожалуйста помогите! #include <iostream> #include <ctime> #include <cmath> #include <stdio.h> #include <cstdlib> using namespace std; int sr_geo(); //среднее геометрическое подробнее

Показать сообщение отдельно
Anonimus1234
0 / 0 / 0
Регистрация: 29.08.2008
Сообщений: 10
09.12.2010, 21:45     Интервалы. Где дыра в алгоритме ?
Мне надо было написать программу которая по заданным числам a,b,c,d считала количество целых чисел на промежутке (a/b , c/d);
Мой алгоритм : я поместил a/b и c/d в переменные с плавающей запятой.И начал прибавлять к одной переменной 1, пока она меньше или равна другой переменной(количество целых чисел = количеству прибавленных единиц) .С целыми (a/b) и (c/d) работает безотказно. Но с дробными, порой возникают ошибки. Я посмотрел и понял : Если у дробей (a/b) и (c/d) одинаковые хвосты, то результат получается на единицу больше. Я округлил
(c/d) и начал считать до него, но если (a/b) и (c/d) < 0 и (c/d) не целое, то результат на единицу больше,тогда,соответственно интервал -1.
Но при сдачи этой проги, пишется что решение не полное. Те тесты которые в условии у меня проходят верно, у комиссии некоторые из них не проходят. В чем у меня проблема, в чем я не прав ?
Вот листинг :
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <math.h>
 
int main(){
freopen("numeric.in","r",stdin);
freopen("numeric.out","w",stdout);
int array[6];
char sign[5];
int number[5];
for(int j = 0;j < 6;j++){
if(j >= 5){array[j] = 0;continue;}
array[j] = 0;
sign[j] = ' ';
number[j] = -100000001;
}
bool flag[4];
flag[0] = true;
flag[2] = true;
scanf("%c%d%c%d%c",&sign[0],&number[0],&sign[1],&number[1],&sign[2]);
switch(sign[2]){
case '/': {
scanf("%d%c",&number[2],&sign[3]);
flag[3] = true;
break;
}
case ',':{
scanf("%d%c",&number[2],&sign[3]);
if(sign[3] == '/'){scanf("%d%c",&number[3],&sign[4]); flag[1] = true; flag[3] = true;}
else{flag[1] = true;} 
break; 
}
default :{break;}
}
int countSign = 0,countNums = 0;
for(int j = 0;j < 5;j++)
{
if(number[j] != -100000001){countNums++;}
if(sign[j] != ' '){countSign++;}
}
 
int trueNums[countNums+1];
for(int j = 0,t = 0;t < countNums;j++)
{
if(number[j] != -100000001){trueNums[t] = number[j];t++;}
 
 
} 
 
 
int k = 0,l = 0;
while(l < 4){
if(flag[l] == true){array[l] = trueNums[k];k++;l++;}
else{array[l] = 1;l++;}
} 
//printf(" a1 %d a2 %d a3 %d a4 %d\n",array[0],array[1],array[2],array[3]);
double a = (double)array[0]/(double)array[1];
double b = (double)array[2]/(double)array[3];
//printf("a %f, b %f\n",a,b);
//-------------------------------------------------------------------------
 
bool first,second;
if(sign[countSign-1] == ')'){second = false;}
else(second = true);
if(sign[0] == '('){first = false;}
else{first = true;}
 
bool eZ1,eZ2;
if((array[0]%array[1] == 0)){eZ1 = true;}
else{eZ1 = false;}
if((array[2]%array[3] == 0)){eZ2 = true;}
else{eZ2 = false;}
int interval = 0;
for(double j = a;j <= (int)b;j += 1) 
{
//printf("a %f, b %f\n",j,b); 
interval++; 
} 
 
 
if(a < 0 && b < 0 && !eZ2){interval--;}
if(eZ1 && !first){ interval--; }
if(eZ2 && !second){ interval--;} 
if(interval < 0){interval = 0;}
printf("%d",interval);
//-------------------------------------------------------------------------
 
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru