Как обратиться к элементам массива БЕЗ применения индексов
Имеется динамический массив. Цель работы написать такую же программу, но без применения индексов для обращения к элементам динамических массивов. Далее приводиться пример программы где использованы индексы.
#include <iostream>
#include <clocale>
using namespace std;
int main()
{
setlocale(0, "");
int num;
int a, b, count = 0;
cout << ("Введите количество элементов: ");
cin >> num;
int *p = new int[num];
for (int i = 0; i < num; i++)
{
cin >> p[i];
}
for (int i = 0; i < num; i++)
{
if ((p[i] > 0 && p[i + 1] > 0) || (p[i] < 0 && p[i + 1] < 0) && (abs(p[i]) < abs(p[i + 1]))) count++;
p[i] = p[i + 1];
}
cout << "Ответ: " << count << endl;
delete[] p;
system("pause");
return 0;
}
Цель же самой программы была простая задача из курса обучения по программированию
Даны натуральное число п, действительные числа а1 ..., an. В последовательности а1 ..., an определить число соседств двух чисел одного знака, причем модуль первого числа должен быть меньше модуля второго числа.
Ответы (1 шт):
int num, count = 0;
cin >> num;
int* p = new int[num];
for (int* i = p; i !=p + num; i++)
cin >> *i;
for (int* ptr1 = p, *ptr2 = p + 1; ptr2 != p + num; ++ptr1, ++ptr2)
if (*ptr1 * *ptr2 > 0 && abs(*ptr1) < abs(*ptr2))
++count;
cout << "Ответ: " << count << endl;
delete[] p;
P.S. Не уверен, но думаю, современный компилятор даже не выполнит умножение *ptr1 * *ptr2, для проверки на положительность. При одинаковых знаках, сразу определит, что условие истина. Хотелось бы слушать мнение гуру...