1

Тема: Функції та масиви. 4 задачі

Неможу зрозуміти чому в мене не правильно виводить 3 та 4 пункти задачі

// ЗАДАЧА:1) подсчет нулевых элементов в заданном одномерном массиве;
//          2) вычисление суммы положительных элементов в заданном одномерном массиве;
//        3) поиск первого максимального элемента и его индекса в заданном одномерном массиве;
//        4) поиск последнего минимального элемента и его индекса в заданном одномерном массиве
// 18:52 08.01.2015 - 19:11 08.01.2015
#include <iostream>
using namespace std;

int rach_null(int * mas, int n)
{
    int null = 0;

    for(int i = 0; i < n; i++)
    {
        if(mas[i] == 0) null += 1;
    }
    return null;
};


int rach_sum (int * mas, int n)
{
        int s_dod = 0;

    for(int i = 0; i < n; i++)
    {
        if(mas[i] > 0) s_dod += mas[i];
    }
    return s_dod;
};




int index_max (int * mas, int n)
{
        int index = 0, max = mas[0];

    for(int i = 0; i < n; i++)
    {
        if(mas[i] > max) index = i;
    }
    return index;
};


int index_min (int * mas, int n)
{
        int index = 0, min = mas[0];

    for(int i = 0; i < n; i++)
    {
        if(mas[i] < min) index = i;
    }
    return index;
};



 int main()
 {
    int n;
    cout<<"enter rozmir masiv: ";
    cin>>n;

    int * mas = new int[n];
    for(int i = 0; i < n; i++)
    {
        cout<<i+1<<") ";
        cin>>mas[i];
    }

    int null_el = rach_null(mas, n);
    cout<<"null element = "<<null_el;

    int sum_dod_el = rach_sum(mas, n);
    cout<<endl<<"suma dodatnich el: "<<sum_dod_el;

    
    int ind_max = index_max(mas, n);
    cout<<endl<<"pervii max el "<<mas[ind_max]<<" eho index "<<ind_max;

    int ind_min = index_min(mas, n);
    cout<<endl<<"pervii min el "<<mas[ind_min]<<" eho index "<<ind_min;

     system("PAUSE");
     return 0;
 }

2

Re: Функції та масиви. 4 задачі

А під "не правильно" яку поведінку програми слід розуміти?

3

Re: Функції та масиви. 4 задачі

Bartash написав:

А під "не правильно" яку поведінку програми слід розуміти?

наприклад пункт 3:
має вивести найбільший додатній елемент, а виводить не найбільший, але додатній.

4

Re: Функції та масиви. 4 задачі

3)

int index_max(const int *mas, const int n){
    int index = 0;

    for (int i = 1; i < n; ++i){
        if (mas[index] < mas[i])  index = i;
    }

    return index;
}
Подякували: Faraon, koala2

5

Re: Функції та масиви. 4 задачі

tiktak написав:

3)

int index_max(const int *mas, const int n){
    int index = 0;

    for (int i = 1; i < n; ++i){
        if (mas[index] < mas[i])  index = i;
    }

    return index;
}

дякую, але у вас здається трішки не правильно

6

Re: Функції та масиви. 4 задачі

Faraon написав:

дякую, але у вас здається трішки не правильно

дякую, але ваше зауваження здається трішки не правильне

7

Re: Функції та масиви. 4 задачі

Faraon написав:
tiktak написав:

3)

int index_max(const int *mas, const int n){
    int index = 0;

    for (int i = 1; i < n; ++i){
        if (mas[index] < mas[i])  index = i;
    }

    return index;
}

дякую, але у вас здається трішки не правильно

А який варіант Ви вважаєте правильнішим?

8

Re: Функції та масиви. 4 задачі

Bartash написав:
Faraon написав:
tiktak написав:

3)

int index_max(const int *mas, const int n){
    int index = 0;

    for (int i = 1; i < n; ++i){
        if (mas[index] < mas[i])  index = i;
    }

    return index;
}

дякую, але у вас здається трішки не правильно

А який варіант Ви вважаєте правильнішим?

Ну мій варіант не працює, а варіант Тіктака мені здався неправильни через...

  for (int i = 1; i < n; ++i){ //"і" починається з 1
        if (mas[index] < mas[i])  index = i;  //при наснупному кроці у нас получеться   if (mas[і-1] < mas[i]) index = i; 
    }
 
    return index;

Це на мій погляд здалося не правильним.

9

Re: Функції та масиви. 4 задачі

Faraon написав:

Ну мій варіант не працює, а варіант Тіктака мені здався неправильни через...

  for (int i = 1; i < n; ++i){ //"і" починається з 1
        if (mas[index] < mas[i])  index = i;  //при наснупному кроці у нас получеться   if (mas[і-1] < mas[i]) index = i; 
    }
 
    return index;

Це на мій погляд здалося не правильним.

index між ітераціями зберігає значення, тому

(mas[і-1] < mas[i]) 

справедливе лише у двох ситуаціях:
1. Перша ітерація
2. Елементи заздалегідь упорядковані

В інших випадках буде

 (mas[і-x] < mas[i]), x є [1;n-1].

10

Re: Функції та масиви. 4 задачі

Все зрозумів. Дякую.