Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 267
#1

Функция не правильно работает - C++

24.08.2012, 11:21. Просмотров 392. Ответов 6
Метки нет (Все метки)

Условие задачи:
В массиве A(N) поменяйте местами наибольший и наименьший элементы.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
 
int maxi, mini, temp;
int change(int *a, int size)
{
   for (int i = 0; i < size; i++)
   { 
    a[mini] = temp;
    a[mini] = a[maxi];
    a[maxi] = temp;
   } 
}
int main()
{  
   int a[] = {1,2,3,4,5,6,7,8,9,10}, min = a[0], max = a[0]; 
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   { 
    if (min > a[i])
    { 
     min = a[i];
     mini = i;
    }
   }
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   {
    if (max < a[i])
    { 
     max = a[i];
     maxi = i; 
    }
   }
   change(a, sizeof(a)/sizeof(int));
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
    cout << a[i] << ", ";
    cout << endl;   
system("PAUSE >> null");    
return 0;
}
...на выходе у меня должны поменяться местами 1 и 10, а вместо этого они заменяются нулями.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 11:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция не правильно работает (C++):

Не правильно работает функция - C++
Функция должна проверят четные строки матрицы. Если в строке есть более трех отрицательных значений возвращать 1 если нет 0. Но что то я...

Функция класса(вычисление определителя произвольной матрицы) работает не правильно(постоянно определитель 0) - C++
void deterMatr(matr matrx) { if (matrx.rows == matrx.columns){ //приведение матрицы к треугольному виду int maxl, k; ...

Если предложение начинается с пробелов, считать строку после пробелов. Правильно ли работает функция? - C++
Скажите пожалуйста правильно ли я написала функцию которая: если предложение начинается с пробелов она считывает строку после пробелов то...

Не могу понять почему не работает (или правильно не работает) - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Функция cin.get(array, 80) работает в одной программе, но не работает в другой - C++
Добрый день. Я что то совсем запутался, одна и та же функция в одной программе работает, а в другой нет. В этой программе...

Правильно реализована функция - C++
//функция удалить с массива и уровнение id //function delete from massive and equalize id AddPluss * DelOnePerson (AddPluss * person...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 11:33 #2
Цитата Сообщение от Leonman Посмотреть сообщение
Условие задачи:
В массиве A(N) поменяйте местами наибольший и наименьший элементы.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
 
int maxi, mini, temp;
int change(int *a, int size)
{
   for (int i = 0; i < size; i++)
   { 
    a[mini] = temp;
    a[mini] = a[maxi];
    a[maxi] = temp;
   } 
}
int main()
{  
   int a[] = {1,2,3,4,5,6,7,8,9,10}, min = a[0], max = a[0]; 
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   { 
    if (min > a[i])
    { 
     min = a[i];
     mini = i;
    }
   }
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   {
    if (max < a[i])
    { 
     max = a[i];
     maxi = i; 
    }
   }
   change(a, sizeof(a)/sizeof(int));
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
    cout << a[i] << ", ";
    cout << endl;   
system("PAUSE >> null");    
return 0;
}
...на выходе у меня должны поменяться местами 1 и 10, а вместо этого они заменяются нулями.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <conio.h>
using namespace std;
int max, min,i
void swap (int &d1,int &d2)
{
 int temp;
temp=d1;
d1=d2;
d2=temp;
}
 
int main()
{  
   int a[] = {1,2,3,4,5,6,7,8,9,10}, min = 0, max = 0; 
   
   for(i = 0; i < sizeof(a)/sizeof(int); i++)
    {
      if (a[min] > a[i])  min = i;
      if (a[max] < a[i]) max=i;
    }
  swap (a[min],a[max]);
  for(i=0;i< sizeof(a)/sizeof(int); i++)
   cout<<a[i]<<' ';
  cout<<endl;
getche();  
return 0;
}
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 11:36 #3
Цитата Сообщение от Leonman Посмотреть сообщение
Условие задачи:
В массиве A(N) поменяйте местами наибольший и наименьший элементы.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
 
int maxi, mini, temp;
int change(int *a, int size)
{
   for (int i = 0; i < size; i++)
   { 
    a[mini] = temp;
    a[mini] = a[maxi];
    a[maxi] = temp;
   } 
}
int main()
{  
   int a[] = {1,2,3,4,5,6,7,8,9,10}, min = a[0], max = a[0]; 
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   { 
    if (min > a[i])
    { 
     min = a[i];
     mini = i;
    }
   }
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
   {
    if (max < a[i])
    { 
     max = a[i];
     maxi = i; 
    }
   }
   change(a, sizeof(a)/sizeof(int));
   for(int i = 0; i < sizeof(a)/sizeof(int); i++)
    cout << a[i] << ", ";
    cout << endl;   
system("PAUSE >> null");    
return 0;
}
...на выходе у меня должны поменяться местами 1 и 10, а вместо этого они заменяются нулями.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <conio.h>
using namespace std;
int max, min,i;
void swap (int &d1,int &d2)
{
 int temp;
temp=d1;
d1=d2;
d2=temp;
}
 
int main()
{  
   int a[] = {1,2,3,4,5,6,7,8,9,10}, min = 0, max = 0; 
   for(i=0;i< sizeof(a)/sizeof(int); i++)
   cout<<a[i]<<' ';
  cout<<endl;
   for(i = 0; i < sizeof(a)/sizeof(int); i++)
    {
      if (a[min] > a[i])  min = i;
      if (a[max] < a[i]) max=i;
    }
  swap (a[min],a[max]);
  for(i=0;i< sizeof(a)/sizeof(int); i++)
   cout<<a[i]<<' ';
  cout<<endl;
  getche();  
  return 0;
}
igorrr37
1646 / 1274 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
24.08.2012, 11:38 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;
 
int maxi, mini, temp;
int change(int *a, int size)
{
    temp = a[mini];
    a[mini] = a[maxi];
    a[maxi] = temp;
   return 0;
}
int main()
{
   int a[] = {5,2,3,4,1,6,7,10,9,8}, min = a[0], max = a[0];
   for(std::size_t i = 0; i < sizeof(a)/sizeof(int); i++)
   {
    if (min > a[i])
    {
     min = a[i];
     mini = i;
    }
   }
   for(std::size_t i = 0; i < sizeof(a)/sizeof(int); i++)
   {
    if (max < a[i])
    {
     max = a[i];
     maxi = i;
    }
   }
   change(a, sizeof(a)/sizeof(int));
   for(std::size_t i = 0; i < sizeof(a)/sizeof(int); i++)
    cout << a[i] << ", ";
    cout << endl;
return 0;
}
ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
24.08.2012, 12:16 #5
Вопрос, зачем Вам тут цикл?

C++
1
2
3
4
5
6
7
8
9
int change(int *a, int size)
{
   for (int i = 0; i < size; i++)
   { 
    a[mini] = temp;
    a[mini] = a[maxi];
    a[maxi] = temp;
   } 
}
И чем Вы собираетесь инициализировать элемент массива a[mini]?
C++
1
a[mini] = temp;
temp у Вас нигде не инициализирован. Правильно так:
C++
1
temp = a[mini];
Enjoy.
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 267
24.08.2012, 13:50  [ТС] #6
ProgrC, Да с циклом уже и сам понял, намудрил я.
А то что с temp, этот вариант решения данной задачи я прочитал на каком-то из форумов, и вроде там люди отписывались что всё работает. Вообщем то я уже исправил всё работает, спасибо.
ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
24.08.2012, 14:13 #7
Цитата Сообщение от Leonman Посмотреть сообщение
ProgrC, Да с циклом уже и сам понял, намудрил я.
А то что с temp, этот вариант решения данной задачи я прочитал на каком-то из форумов, и вроде там люди отписывались что всё работает. Вообщем то я уже исправил всё работает, спасибо.
Очень полезно иногда самому просмотреть код (причем просмотреть детально) и отследить в отладчике ключевые значения. Во первых, в таком случае, Вы всегда будете в курсе где и как меняется Ваша переменная, а во вторых, Вы сразу сможете найти ошибку в коде.
Отладчик - чудо вещь! Дает больше информации для анализа.
Удачи!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 14:13
Привет! Вот еще темы с ответами:

Правильно ли перегружена функция? - C++
Здрасти, можно ли так перегрузить функцию? int FillBasicPlan(int** pMatrix,int** pMatrix2,int count_row, int count_col); int...

Функция не правильно принимает массив - C++
Функция не правильно принимает массив почему так вот код програмы #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;time.h&gt; ...

Функция сложения C строк. Правильно ли написана? - C++
Ребят, интересует вопрос, нужна ли строчка &quot;delete sum;&quot;? По логике: надо очистить выделенную память. На деле: если я её очищу, то не...

функция Уменьшение и Сумма не совсем правильно работают. - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; // создать двумерный массив 3х4 //ввод элементов int* *massiv() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.08.2012, 14:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru