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

Исправить без использования глобальных переменных - C++

Восстановить пароль Регистрация
 
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 17:16     Исправить без использования глобальных переменных #1
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include<iostream>
using namespace std;
int a[100],n,maximum=-1000,x;
void zapros()
{
 cout<<"Vvedite razmer massiva"<<endl;
}
void maxim()
{
 cout<<"Vvedite massiv iz "<<n<<" elementov:"<<endl;
}
void sh()
{
 cout<<"Maximum vydelen znakami '[' i ']'"<<endl;
}
void max()
{
 for(int i=0; i<n; ++i)
 {
 cin>>a[i];
 if(a[i]>maximum)
 {
 maximum=a[i];
 x=i;
 }
 }
}
void dobig()
{
 for(int i=0; i<x; ++i)
 {
 for(int j=0; j<x; ++j)
 {
 if(a[i]<a[j])swap(a[i],a[j]
 }
 }
}
void dosmall()
{
 for(int i=x+1; i<n; ++i)
 {
 for(int j=x+1; j<n; ++j)
 {
 if(a[i]>a[j])swap(a[i],a[j]
 }
 }
}
void show()
{
 for(int i=0; i<n; ++i)
 {
 if(i==x)
 {
 cout<<"["<<a[i]<<"] ";
 }
 else cout<<a[i]<<" ";
 
 }
 cout<<endl;
}
int main()
{
 zapros(
 cin>>n;
 maxim(
 max(
 dobig(
 dosmall(
 sh(
 show(
}
Сказали нужно исправить. без использования глобальных переменных. Массивы надо передавать в функции как параметры.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 17:16     Исправить без использования глобальных переменных
Посмотрите здесь:

Вывод числа в столбик (без использования строковых переменных) C++
поиск глобальных переменных с++ C++
C++ процедура без глобальных переменных для вывода суммы элементов матрицы и номера строки с минимальной суммой элементов
Массив (переписать без глобальных переменных) C++
C++ Обмен значениями двух переменных А и В без использования вспомогательной переменной
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 17:27     Исправить без использования глобальных переменных #2
Bukharov11, кто такие чутки и зачем их исправлять?
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 17:35  [ТС]     Исправить без использования глобальных переменных #3
Чуток это немного)
препод вот что сказал по этому тексту: Ни каких глобальных переменных! Массивы надо передавать в функции как параметры.
вот надо переделать, а как не знаю.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 17:36     Исправить без использования глобальных переменных #4
А что прога вообще делает?
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 18:26  [ТС]     Исправить без использования глобальных переменных #5
taras atavin, Дан массив из n целых чисел. Найти первый максимум в этом массиве, а затем все числа до этого элемента упорядочить по возрастанию, а после — по убыванию.

вот что надо сделать. Но с использованием функций.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 18:52     Исправить без использования глобальных переменных #6
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream.h>
 
unsigned int  SizeQwery  (                                    );
int          *InputArray (unsigned int  n                     );
unsigned int  FindMax    (int          *array, unsigned int  n);
void          Sort       (int          *array, unsigned int  n);
void          OutputArray(int          *array, unsigned int  n);
void          FreeArray  (int          *array                 );
 
int main ()
{
 unsigned int  n;
 int          *array=nullptr;
 unsigned int  max;
 n=SizeQwery();
 if (n>0)
 {
  array=InputArray(n       );
  m    =FindMax   (array, n);
  std::cout<<"Первый максимум - "<<m<<"-й элемент, равный "<<array[m]<<"."<<std::endl;
  Sort       (array, n);
  OutputArray(array, n);
  FreeArray  (array   );
 }
 return 0
}
 
unsigned int  SizeQwery  (                                    )
{
 unsigned int result;
 std::cout<<"Введи размер массива: ";
 sdd::cin>>result;
 std::cout<<"."<<std::endl;
 return result;
}
 
int          *InputArray (unsigned int  n                     )
{
 int *result;
 int *p;
 int *e;
 result=new int [n];
 for (e=result+n-1; p=result; p<=e; ++e)
 {
  std::cout<<"Введи "i<<"-й элемент";
  sdd::cin>>*p;
  std::cout<<"."<<std::endl;
 }
 return result;
}
 
unsigned int  FindMax    (int          *array, unsigned int  n)
{
 int *max;
 int *e;
 int *p;
 (for max=array, e=array+n-1, p=aray; p<=e; ++p)
 {
  if (*max<*p)
  {
   max=p;
  }
 }
 return (unsigned int)(p-array);
}
 
void          Sort       (int          *array, unsigned int  n)
{
 unsigned int  m;
 int          *p1;
 int          *p2;
 int          *e;
 int           t;
 m=FindMax(array, n);
 for (e=array+m, p1=array; p1<e; ++p1)
 {
  for (p2=p1+1; p2<=e; ++p2)
  {
   if (*p1>*p2)
   {
     t =*p1;
    *p1=*p2;
    *p2= t;
   }
  }
 }
 for (e=array+n-1, p1=array+m+1; p1<e; ++p1)
 {
  for (p2=p1+1; p2<=e; ++p2)
  {
   if (*p1<*p2)
   {
     t =*p1;
    *p1=*p2;
    *p2= t;
   }
  }
 }
}
 
void          OutputArray(int          *array, unsigned int  n)
{
 int *p;
 int *e;
 for (e=array+n-1, p=array; p<=e; ++p)
 {
  std::cout<<i<<"-й элемент равен "<<*p<<"."<<std::endl;
 }
}
 
void          FreeArray  (int          *array                 )
{
 delete [] array;
}
Что сложного?
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 18:54  [ТС]     Исправить без использования глобальных переменных #7
А проще можно? Препод просто не поверит, что это я сделал.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 19:01     Исправить без использования глобальных переменных #8
Сложнее, ты хотел сказать. До указателей нельзя проходить параметры-массивы, так как они передаются только по указателям.

Добавлено через 2 минуты
И у тебя есть вызов функции swap, а это уже усложнение. Я обошелся без этой функции.

Добавлено через 1 минуту
У тебя одновременно max, maxim и maximum. Это ещё вообще лишняя дебря. У меня её нет. Безпрототиповые функции страдают такой сложностью - надо следить за порядком их определения. Я и это упростил.
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 19:01  [ТС]     Исправить без использования глобальных переменных #9
А без беззнаковых типов можно как то?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 19:03     Исправить без использования глобальных переменных #10
Можно ещё юзать массив-объект. Это тоже сложнее, у меня его нет.

Добавлено через 41 секунду
Цитата Сообщение от Bukharov11 Посмотреть сообщение
А без беззнаковых типов можно как то?
Можно. А зачем?
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 19:05  [ТС]     Исправить без использования глобальных переменных #11
я же говорю препод не зачтет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 20:31     Исправить без использования глобальных переменных
Еще ссылки по теме:

Поменять местами значения двух переменных без использования дополнительной переменной C++
Составьте программу без использования строковых переменных, которая разбивает число n на цифры и печатает их в C++
C++ Описание глобальных переменных

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 20:31     Исправить без использования глобальных переменных #12
Хотя, подробное изучение указателей до параметров-массивов не обязательно. Но как минимум синтаксис декларации указателя надо знать. Если тебе сложна адресная арифметрика, то выкидывай и заменяй на индексацию. Проблема ведь была в параметрах? Ну так передачу параметров я тебе показал, а циклы можно переделать.

Добавлено через 2 минуты
Цитата Сообщение от Bukharov11 Посмотреть сообщение
я же говорю препод не зачтет.
А он сможет объяснить, как размер массива, или индекс его элемента может быть отрицательным? Здесь unsigned только за тем, чтоб синтаксически закрепить эту особенность индекса и количества, семантически он здесь ничего не даёт, так как уже есть более строгая проверка на > 0. Можно убрать. Но если short int, то unsigned удвоил бы максимально возможное количество.

Добавлено через 1 час 17 минут
Цитата Сообщение от Bukharov11 Посмотреть сообщение
using namespace std;
и цепляем всё, что там валяется. Ты все члены пространства из файла iostream знаешь досконально? Можешь гарантировать, что ни один не совпадёт с каким нибудь твоим идентификатором? Это ещё одна сложность. А у меня каждый поток и каждый манипулятор цепляется отдельно и не тянет за собой весь iostream. А поэтом можно не знать про cerr, например. Это тоже упрощение: не надо, придумывая идентификатор гадать, с чем он может случайно совпасть. Используемые же члены надо знать так и так.
Yandex
Объявления
10.06.2012, 20:31     Исправить без использования глобальных переменных
Ответ Создать тему
Опции темы

Текущее время: 11:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru