1

Тема: Робота з масивом в підпрограмі.

Суть завдання :
Задається  n-кількість чисел. m- можлива кількість перетворень. k-кількість чисел, які ми будемо змінювати за одне перетворення.
Мета перетворення - збільшення найменшого елементу на данний момент на 1,і разом з найменшим збільшити ще (k-1) чисел ,які розташовані один за одним .Вивести найменший елемент після всіх перетворень.
  Наприклад :
     
            n=6, m=3, k=2,
числа:  3 2 1 5 3 7
результат 1-ого перетворення : 3 3 2 5 3 7,   
                2-ого                      : 3 4 3 5 3 7,
                3-ого                      : 3 5 4 5 3 7.
вивести 3.

Розв'язання:
Cпочатку потрібно занести данні числа в масив ,
Потім в циклі присвоювати нове значення елементам масиву,які перед цим,зазнали перетворень в підпрограмі,де визначався найменший елемент...
Кількість дій в циклі = m;
  Проблема занести дані масиву в підпрограму.
Прошу допомоги.

2

Re: Робота з масивом в підпрограмі.

За так ніхто нічого не робить . Показуй свій код і тобі підкажуть де помилки .

Подякували: koala1

3

Re: Робота з масивом в підпрограмі.

#include <iostream>

using namespace std;

int peretvorenia(/*int ... ,*/int n,int k){
   int dani[n];
   int minimal;

   for(int i=0;i<n;i++){
    if(dani[i]<minimal) minimal=i;
   }
    for(int i=0;i<k;i++){
    dani[minimal]++;
    if(minimal+k<=n) minimal++;
    else minimal --;
   }

   for(int i=0;i++;i<n){
       return dani[i];
   }

}


int main()
{
    int n,m,k,a,rezultat;
     cin>>n>>m>>k;
    int dani[n];

    for(int i=0;i<n;i++){
        cin>>a;
    dani[i]=a;
    }

    for(int i=0;i<m;i++){
       for(int j=0;j<n;j++){
        //елементи масиву присвоїти елементам перетворених в підпрограмі.
      }
   }

    for(int i=0;i<n;i++){
        if(dani[i]<rezultat) rezultat=dani[i];

    }

    cout<<rezultat;
    return 0;
}

4

Re: Робота з масивом в підпрограмі.

int peretvorenia(int dani[], int n,int k);
...
cin>> dani[i]; // a непотрібне
...
peretvorenia(dani, n, k); //в функцію буде передано посилання на масив, тому всі зміни будуть відбуватися в тому самому масиві і в основній програмі, і в функції
Подякували: Ntpvlk1

5

Re: Робота з масивом в підпрограмі.

А ще перша ж операція в функції - пошук мінімума - некоректна. Ви не встановлюєте початкове значення minimal, тому порівняння буде казна-з-чим, і, крім того, порівнюєте індекси із елементами.

6

Re: Робота з масивом в підпрограмі.

#include <iostream>

using namespace std;

int peretvorenia(int dani[], int n,int k){

   int minimal=1000;

   for(int i=0;i<n;i++){
    if(dani[i]<minimal) minimal=i;
   }
    for(int i=0;i<k;i++){
    dani[minimal]++;
    if(minimal+k<=n) minimal++;
    else minimal --;
   }

   for(int i=0;i++;i<n){
       return dani[i];
   }

}


int main()
{
    int n,m,k,rezultat;
     cin>>n>>m>>k;
    int dani[n];

    for(int i=0;i<n;i++){
       cin>> dani[i];
    }

    for(int i=0;i<m;i++){
       for(int j=0;j<n;j++){
        peretvorenia(dani, n, k);
      }
   }

    for(int i=0;i<n;i++){
        if(dani[i]<rezultat) rezultat=dani[i];
    }

    cout<<rezultat;
    return 0;
}

7

Re: Робота з масивом в підпрограмі.

програма не звертає увагу на підпрограму. просто виводиться найменший елемент.
можливо я не правильно зрозумів. Я не порівнюю індекси із елементами.я шукаю індекс найменшого елемента.щоб потім з ним працювати

8

Re: Робота з масивом в підпрограмі.

Що ви ось тут хотіли зробити?

for(int i=0;i++;i<n){
       return dani[i];
   }

9

Re: Робота з масивом в підпрограмі.

повернути всі елементи масиву

10

Re: Робота з масивом в підпрограмі.

Ntpvlk написав:

повернути всі елементи масиву

знаєте, як працює return?

11

Re: Робота з масивом в підпрограмі.

тобто. ви натякаєте. що підпрограма закінчує працювати.повертаючи лише перший елемент?Я просто ніколи не працював з масивами в підпрограмах.тому не розумію.як його туди задати і як вивести .в цьому головна проблема

12

Re: Робота з масивом в підпрограмі.

Ntpvlk написав:

тобто. ви натякаєте. що підпрограма закінчує працювати.повертаючи лише перший елемент?Я просто ніколи не працював з масивами в підпрограмах.тому не розумію.як його туди задати і як вивести .в цьому головна проблема

ага

int[] func()
{
int arr[5];
return arr;
}

наче так

Подякували: Ntpvlk1

13

Re: Робота з масивом в підпрограмі.

int[] func()
int arr[5];

що означає func() і чому саме 5?

14

Re: Робота з масивом в підпрограмі.

Ntpvlk написав:
int[] func()
int arr[5];

що означає func() і чому саме 5?

ім'я функції, можете там робити і не 5, а скільки хочете

15

Re: Робота з масивом в підпрограмі.

дякую.але чому саме arr я ж не змінюю величину масиву. чи простим статистичним масивом не можна скористатись через те що змінюємо вміст?

16

Re: Робота з масивом в підпрограмі.

i  - індекс
dani[ i ] - елемент
dani[ i ]<minimal - елемент порівнюється з minimal; а що в minimal?
minimal=i; - в minimal індекс.
От і маємо - елемент порівнюється з індексом.
Покуріть це:

//пошук мінімуму в масиві
int minimal=dani[0];
for(unsigned int i=1;i<n;i++){
    if(dani[i]<minimal) minimal=dani[i];
}
//пошук індекса мінімуму в масиві
unsigned int minimal_i=0;
for(unsigned int i=1;i<n;i++){
    if( dani[ i ] < dani[ minimal_i ] ) minimal_i = i;
}

Зверніть увагу - тут індекси з елементами не плутаються, зокрема, тому, що вони різних типів і на порівняння компілятор дасть попередження.

17 Востаннє редагувалося koala (12.10.2014 19:47:23)

Re: Робота з масивом в підпрограмі.

FakiNyan написав:
int[] func()
{
int arr[5];
return arr;
}

наче так

Це однозначне UB - масив, проголошений в функції, припинить існувати з виходом із функції, а посилання на нього повернеться назовні.

18

Re: Робота з масивом в підпрограмі.

ну це зрозуміло. а що мені повертати з підпрограми?

 for(int i=0;i++;i<n){
       return dani[i];
   }

я так зрозумів це неправильно

19

Re: Робота з масивом в підпрограмі.

В моїй відповіді від 17:27:14 прочитайте коментар поруч на 5-му рядку.

Подякували: Ntpvlk1

20

Re: Робота з масивом в підпрограмі.

#include <iostream>

using namespace std;

int peretvorenia(int dani[], int n,int k){

 //  int minimal=1000;

  // for(int i=0;i<n;i++){
   // if(dani[i]<minimal) minimal=i;
  // }
  //  for(int i=0;i<k;i++){
  //  dani[minimal]++;
  //  if(minimal+k<=n) minimal++;
  //  else minimal --;
 //  }

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

}


int main()
{
    int n,m,k,rezultat;
     cin>>n>>m>>k;
    int dani[n];

    for(int i=0;i<n;i++){
       cin>> dani[i];
    }

    for(int i=0;i<m;i++){
       for(int j=0;j<n;j++){
        peretvorenia(dani, n, k);// тут щось не так!
      }
   }

    for(int i=0;i<n;i++){
        if(dani[i]<rezultat) rezultat=dani[i];
    }

    cout<<rezultat;
    return 0;
}

не принципово чи воно правильно видає відповідь.головне щоб працювала підпрограма навіть при такій умові нічого не змінюється