Created
March 29, 2011 10:49
-
-
Save Levik/892154 to your computer and use it in GitHub Desktop.
lab4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <iomanip> | |
#include <cmath> | |
#include <cstdlib> | |
#include <conio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <stdio.h> | |
#include <time.h> | |
#define N 100 | |
//удалить ненужные | |
using namespace std; | |
void main() | |
{ | |
float a[N], m, raz, bliz; | |
int i, j, iraz, jraz; | |
srand(time(0)); | |
for (i = 0; i < N; i++) | |
a[i] = rand()%9+rand()*3/10000; // вещественные (0, 10) ? | |
cout<<"Enter m: "; | |
cin>>m; | |
bliz = m; | |
for (i = 0; i < N; i++) | |
for (j = i++; j < N; j++) | |
{ | |
if (fabs(a[i] - a[j] - m) < bliz) | |
{ | |
raz = a[i] - a[j]; | |
bliz = fabs(raz-m); | |
iraz=i; | |
jraz=j; | |
} | |
} | |
cout<<"blizhe vseh a[ "<<iraz<<" ] - a[ "<<jraz<<" ] = "<<raz; | |
getch(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
a[i] = rand()%9+rand()*3/10000;
. но в нем точно есть одна ошибка - значение не приводится к типуfloat
- изза этого получаются только целые числа.for (j = i++; j < N; j++)
ты юзаешь инкеремент для инициализации. есть большая разница между записьюi+1
иi++
- вторая запись эквивалентнаi=i+1
, т.е. ты лишний раз увеличиваешьi
внутри цикла и проскакиваешь часть элементов.определить 2 элемента, разница между которыми ближе всего к M
. если понять влоб, то получится что есть разница в порядке сравнения элементов, например:a[0]=5
a[1]=-10
M=10
, тогдаfabs(a[0]-a[1]-M)=5
, аfabs(a[1]-a[0]-M)=-25
. мне кажется или ты не так задание написал, или препод слажал.. врядли от вас хотят концентрации на таких вещах, при том что вы только начали изучать язык. скорее имелось ввиду не разность, а расстояние между элементами, но может это и подстава спецом. в форке я исхожу из последнего.M<0
кроется в том, что ты инициализируешьbliz = m;
так, а сравниваешь потом по модулю:if (fabs(a[i] - a[j] - m) < bliz)
. получается что при отрицательных числах эта строка никогда не срабатывает иiraz
,jraz
иraz
остаются не инициализированными с мусорными значениями, которые ты потом и выводишь. учись пользоваться дебаггером - это очень важно.от 0 до 10
это включительно или где? в форке я подразумеваю, что [0;10). алгоритм выходит такой:a[i] = float(rand()%10) + float(rand()%100) / 100;