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

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

Войти
Регистрация
Восстановить пароль
 
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
#1

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

10.06.2012, 17:16. Просмотров 609. Ответов 11
Метки нет (Все метки)

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(
}
Сказали нужно исправить. без использования глобальных переменных. Массивы надо передавать в функции как параметры.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исправить без использования глобальных переменных (C++):

Массив (переписать без глобальных переменных) - C++
Помогите написать ету програму без глобальных переменных #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; ...

процедура без глобальных переменных для вывода суммы элементов матрицы и номера строки с минимальной суммой элементов - C++
Задание: составить процедуру без глобальных переменных выполняющуюю для для матрицы D с размерами kхl(k&lt;8 и l&lt; 10) необходимо...

Вывод числа в столбик (без использования строковых переменных) - C++
Дано натуральное число N. Не используя строковые переменные, вывести в столбик это число. Для решения использовать функции целочисленного...

Обмен значениями двух переменных А и В без использования вспомогательной переменной - C++
Сконструировать алгоритм обмена значениями двух переменных А и В без использования вспомогательной переменной

Поменять местами значения двух переменных без использования дополнительной переменной - C++
4. Написать программу, которая меняет местами значения двух переменных без использования дополнительной переменной.

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

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

вот что надо сделать. Но с использованием функций.
0
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;
}
Что сложного?
1
Bukharov11
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 46
10.06.2012, 18:54  [ТС] #7
А проще можно? Препод просто не поверит, что это я сделал.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 19:01 #8
Сложнее, ты хотел сказать. До указателей нельзя проходить параметры-массивы, так как они передаются только по указателям.

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

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

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

Определение глобальных переменных - C++
Доброго времени суток! Интересует следующий вопрос - Возможно ли определение глобальных переменных в теле подпрограмм или классов? ...

Объявление глобальных переменных - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; void main (int x, int y) { printf (&quot;x=&quot;); scanf_s (&quot;x=&amp;d&quot;,...

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

поиск глобальных переменных с++ - C++
Есть задачка, которую не могу решить. Дано 9000 .cpp файлов, которые являют собой полноценные программы со своими мейнами. Нужно найти для...


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

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

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