Решил начинающий программист Вася Битиков ланшафтным дизайном заняться - оформить бабушкину клумбу оригинальным узором, уж очень бабушка Рита цветы любит. Купил Вася в магазине рассаду - желтенькие маргаритки (M) и синенькие васильки (W), начертил план клумбы, разбил его на горизонтальные (H) и вертикальные (V) рядочки и в каждой клеточке соответствующий цветок нарисовал. А чтобы весь рисунок не запоминать он программку написал, которая по номерам только некоторых рядочков (V1, H1, H2) и координатам клеточки (Vo и Ho) определяет какой цветок должен расти в данном месте клумбы.
Попробуйте и вы такую же программу написать.
Учтите, нумерация вертикальных рядочков начинается с крайнего левого, номер которого равен нулю, а горизонтальных - с самого верхнего рядочка, номер которого также равен нулю.
Входные данные:
В первой строке входного потока натуральное число V1 - координата вертикального рядочка (0 < V1 < 100) Во второй строке 2 натуральных числа разделенные пробелом H1, H2 - координаты горизонтальных рядочков (0 < H1 < H2 < 100) В третьей строке 2 натуральных числа разделенные пробелом Vo, Ho - координаты клеточки, для которой нужно определить вид цветка (0 < Vo, Ho < 100)
Пример входного файла (input.txt):
7
5 10
15 2
Выходные данные:
W
В выходной поток необходимо вывести одну большую латинскую букву, обозначающую вид цветка: M - маргаритка или W - василек.
using namespace std;
int main() {
int mat[3][3];
int k;
int size=0;
int * arr=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cin>>mat[i][j];
if (mat[i][j]>0){
arr=(int*)realloc(arr,sizeof(int)*(++size));
arr[size-1]=mat[i][j];
}
}
}
for(int i=0;i<size;i++){
cout<<arr[i];
}
delete arr;
cin.get();
cin.get();
return 0;
}
При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333
Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999.
В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999... - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице.
Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π.
Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус.
Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт:
1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.