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

Определение класса для работы с одномерным динамическим массивом - C++

Восстановить пароль Регистрация
 
Sov3117
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 10
16.06.2010, 23:49     Определение класса для работы с одномерным динамическим массивом #1
задача : В массиве А(N) поменять местами последний отрицательный элемент с максимальным элементом. делал в BC++

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
#include <iostream.h>
#include <stdlib.h>
class Massiv{       
  int n;
  int *p;                  
  int z;
  int t;
  int s;
  int max;
public:
  Massiv(int k);        
  ~Massiv(){delete [] p;}   
  maximal();
  otric();
  zamena();
  show();
};
Massiv::Massiv(int k){  
  n = k;                
  p = new int[n];       
  if(p == NULL){
    cout<<"no memory"<<endl;
    exit(1);
  }
  for(int i = 0; i < n; i++)     
    p[i] = random(10)-5;
}
Massiv::maximal()
{
  for(int i=0; i<n; i++)
  {
    if (p[i]> p[max])
    p[max]=p[i];
 
  }
   cout<<"\n maximal element = "<<p[max]<<endl;
   z=p[max];
}
Massiv::otric()
{
  for(int i = n-1; i >=0; i--)
  {
    if (p[i]<0)
    {
      s=i;
      break;
    }
  }
  if (p[s]>=0)
    cout<<"\n posled otric element net"<<endl;
  else
    cout<<" posled otric element = "<<p[s]<<endl;
    t=p[s];
}
Massiv::zamena()
{
   if(p[s]<0)
   {
      for(int i=0; i<n; i++)
      {
       if(p[i]==z)
        p[i]=t;
       else  if(i==s)
        p[i]=z;
      }
   }
}
Massiv::show()
{
  cout<<"Massiv=="<<endl;
  for(int i = 0; i < n; i++)
  {
   cout.width(4);
   cout<<p[i]<<" ";
  }
}
int main(){
  int kol;
  cout<<"Vvedi chislo elementov:";     cin>>kol;
  Massiv ob(kol);       
  ob.show();
  ob.maximal();
  ob.otric();
  ob.zamena();
  ob.show();
  system ("pause");
  return 0;
}
Я менял последний отрицательный со всеми элиментоми равными максимальному.
Не могу понять почему меняется значение 2-го элемента массива, вне зависимости от того максимальный это элемент или нет.И если не лень объясните
почему программа не верно работает если в

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Massiv::zamena()                            //Massiv::zamena() 
{                                                    {
   if(p[s]<0)                                             if(p[s]<0)
   {                                                        {
      for(int i=0; i<n; i++)                             for(int i=0; i<n; i++) 
      {                                                       {
        if(p[i]==z)                                    if(p[i]==p[max]) 
        p[i]=t;                                            p[i]=p[s];
        else  if(i==s)                                        else  if(i==s)
        p[i]=z;                                                p[i]=z; 
      }                                                         }
   }                                                          }
}
}

я напрямую использую p[max], p[s]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2010, 23:49     Определение класса для работы с одномерным динамическим массивом
Посмотрите здесь:

C++ Написать библиотеку функций для работы с одномерным целочисленным массивом
С одномерным динамическим массивом, состоящим из n вещественных элементов, произвести следующие операции: C++
C++ Написать следующие функции для работы с динамическим массивом:
Разработать программу для работы с одномерным массивом C++
C++ Создать класс для роботы с одномерным массивом
Создать класс для работы с двумерным динамическим массивом чисел C++
C++ Написать функции для работы с динамическим одномерным массивом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sov3117
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 10
18.06.2010, 02:05  [ТС]     Определение класса для работы с одномерным динамическим массивом #2
если кому интересно вот исправление
C++
1
2
3
4
5
6
7
8
9
10
11
Massiv::maximal()
{
  int im = 0; int max=p[0];
  for(int i=1; i<n; i++)
  {
    if (p[i]> max){ max=p[i]; im=i;}
 
  }
   cout<<"\n maximal element = "<<p[im]<<endl;
   z=max;
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.06.2010, 08:06     Определение класса для работы с одномерным динамическим массивом #3
Цитата Сообщение от Sov3117
В массиве А(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
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
#include <stdio.h>
#include <stdlib.h>
 
int func(int n[], int size);
int print(int n[], int size);
 
 
int main(void) /* ANSI C89 */
{
    /*
     *   В массиве А(N) поменять местами последний
     *   отрицательный элемент с максимальным элементом.
     *
     */
    
    int n[] = { 1, -2, 10, -3, 4, 7 };
    int size = sizeof n / sizeof n[0];
    
    
    print(n, size);
    
    func(n, size);
    
    print(n, size);
    
    
    return EXIT_SUCCESS;
}
 
int func(int n[], int size)
{
    int lastneg, lni;
    int max, mi;
    int i, tmp;
    
    
    max = n[0];
    
    lni = -1;
    
    for (i = 0; i < size; i++) {
        
        if (n[i] > max) {
            max = n[i];
            mi = i;
        }
        
        if (n[i] < 0) {
            lastneg = n[i];
            lni = i;
        }
    
    }
 
    if (lni < 0)
        return -1;
 
 
    tmp = n[mi];
    
    n[mi] = n[lni];
    
    n[lni] = tmp;
    
    
    return 0;
}
 
int print(int n[], int size)
{
    int i;
    
    for (i = 0; i < size; i++)
        printf("%3d%s", n[i], (i+1 < size ? ", " : "\n"));
        
    return 0;
}
Yandex
Объявления
18.06.2010, 08:06     Определение класса для работы с одномерным динамическим массивом
Ответ Создать тему
Опции темы

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