Указатели в массиве

В общем, програма должна выводить массив из 15 чисел. Задание : найти минимальное число в массиве, и обчислить сумму чисел между первым и последним положительным числом. Это я уже сделал, но теперь нужно выполнить данный код с помощью указателей. Уже какой день не получается.

#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <locale.h> 
using namespace std;

int main() {
    int a, b, sum = 0, min = 0, x = 15, i, F = 0, P = 0, A = 0;
    const int n = 15;
    int arr[n];
    cout << "Size it`s array - [" << n << ']' << endl;
    do {
        cout << "Input a : "; cin >> a;
        cout << "Input b : "; cin >> b;
        cout << "=================================================================================" << endl;
    } while (a >= b);
    srand(time(NULL));
    for (i = 1; i <= n; i++) {
        arr[i] = rand() % (a - b) + a;
        cout << "arr[" << i << "] =  " << arr[i] << endl;
        if (arr[i] < min) // find min number in array
            min = arr[i];
    }
    for (i = 1; i <= n; i++) { // find first positive number
        if (arr[i] > 0) {
            P = i;
            i = 15;
        }
    }
    for (x = 15; x > 0; x--) { // find last positive number
        if (arr[x] > 0) {
            F = x;
            x = 0;
        }
    }
        for (A = P; A <= F; A++) { // sum number between first and last positive number
            sum += arr[A];
        }   
    cout << "=================================================================================" << endl;
    cout << "The sum of the elements between the first and the last positive integer = " << sum << endl;
    cout << "Minimum number in array = " << min << endl;
    system("pause");
    return 0;
}

Во-первых, надо исправить очевидные ошибки типа выхода за границу массива:

#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <locale.h> 
using namespace std;

int main() {
    int a, b, sum = 0, min = 0, x = 15, i, F = 0, P = 0, A = 0;
    const int n = 15;
    int arr[n];
    cout << "Size it`s array - [" << n << ']' << endl;
    do {
        cout << "Input a : "; cin >> a;
        cout << "Input b : "; cin >> b;
        cout << "=================================================================================" << endl;
    } while (a >= b);
    srand(static_cast<unsigned int>(time(NULL)));
    for (i = 0; i < n; i++) {
        arr[i] = rand() % (a - b) + a;
        cout << "arr[" << i << "] =  " << arr[i] << endl;
        if (arr[i] < min) // find min number in array
            min = arr[i];
    }
    for (i = 0; i < n; i++) { // find first positive number
        if (arr[i] > 0) {
            P = i;
            break;
        }
    }
    for (x = n - 1; x >= 0; x--) { // find last positive number
        if (arr[x] > 0) {
            F = x;
            break;
        }
    }
    for (A = P; A <= F; A++) { // sum number between first and last positive number
        sum += arr[A];
    }
    cout << "=================================================================================" << endl;
    cout << "The sum of the elements between the first and the last positive integer = " << sum << endl;
    cout << "Minimum number in array = " << min << endl;
    system("pause");
    return 0;
}

И уже во-вторых, переделываем на указатели. Один из вариантов:

#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <locale.h> 
using namespace std;

int main() {
    int a, b, sum = 0, min = 0, i;
    const int n = 15;
    int arr[n];
    cout << "Size it`s array - [" << n << ']' << endl;
    do {
        cout << "Input a : "; cin >> a;
        cout << "Input b : "; cin >> b;
        cout << "=================================================================================" << endl;
    } while (a >= b);
    srand(static_cast<unsigned int>(time(NULL)));
    int *ptr = arr;
    for (i = 0; i < n; ++i, ++ptr) {
        *ptr = rand() % (a - b) + a;
        cout << "arr[" << i << "] =  " << *ptr << endl;
        if (*ptr < min) // find min number in array
            min = *ptr;
    }
    int *first_pos = nullptr, *last_pos = nullptr;
    for (ptr = arr; ptr < ptr + n; ++ptr) { // find first positive number
        if (*ptr > 0) {
            first_pos = ptr;
            break;
        }
    }
    for (ptr = ptr + n - 1; ptr >= arr; --ptr) { // find last positive number
        if (*ptr > 0) {
            last_pos = ptr;
            break;
        }
    }
    for (ptr = first_pos; ptr <= last_pos; ++ptr) { // sum number between first and last positive number
        sum += *ptr;
    }
    cout << "=================================================================================" << endl;
    cout << "The sum of the elements between the first and the last positive integer = " << sum << endl;
    cout << "Minimum number in array = " << min << endl;
    system("pause");
    return 0;
}

Случай, когда все элементы массива отрицательные, оставляю вам на самостоятельную проработку.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.