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

Динамический одномерный массив в функцию - C++

Восстановить пароль Регистрация
 
viktor9006
Сообщений: n/a
21.12.2009, 21:45     Динамический одномерный массив в функцию #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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <io.h>
#include <iostream.h>
#include <iomanip.h>
#include <windows.h>
int rustext(char str[])
{
CharToOem(str,str);
cout << str;
}
 
int GetArray(int *mas, int &cnt,char *fn ) //функция загрузки массива из файла
{
  cnt=0;
  int v;
 
 // rustext("Введите имя файла с массивом чисел: ");
//  cin>>fn;
  rustext("\nЗагрузка массива:\n");
  ifstream fin(fn);
  while (!fin.eof()) //загрузим все элементы из файла и определим их количество
  {
    fin>>v;
    if (!fin.eof())
    {
      cnt++;
      mas[cnt]=v;
      cout<<"   "<<v;
    }
  }
  rustext("\nЗагружено ");
  cout<<cnt;
  rustext(" элементов массива.\n");
  //*mas=0;
  fin.close();
}
 
 
void ShowArray(int *mas, int cnt) //функция вывода массива на экран
{
  cout<<"[";
  for (int i=1; i<=cnt; i++) {printf("%3d ", mas[i]);}
  cout<<"]\n";
}
 
void SortArray(int *mas, int cnt) //функция сортировки массива (методом выбора)
{
  int tmp;
  int min=1;
  for (int i=1; i<cnt; i++)
  {
    min=i;
    for (int j=i; j<=cnt; j++)
    {
      if (mas[j]<mas[min]) {min=j;}
    }
    tmp=mas[min];
    mas[min]=mas[i];
    mas[i]=tmp;
  }
}
 
 
int FindValue(int *mas, int cnt, int v) //рекурсивная функция для поиска элемента в массиве
{
  int L,R,M,i;
  L=0;M=0;R=cnt-1;
  while(L<=R)
  {
  if (L==R)
  M=L ;
  else
  M=L+(R-L)*(v-mas[L])/(mas[R]-mas[L]);
 if (M<L||M>R) return (-1);
  if (mas[M]==v)  return(M);
  if (mas[M]>v) R=M-1;
  else
  L=M+1;
 
  }
return (-1)     ;
 
}
 
 
void main()
{
  int N; //количество элементов в массиве
   int v;
 int cntp=0;
  char *f="";
  rustext("Введите имя файла с массивом чисел: ");
  cin>>f;
  rustext("\nЗагрузка массива:\n");
  ifstream fin(f);
  while (!fin.eof()) //загрузим все элементы из файла и определим их количество
  {
    fin>>v;
    if (!fin.eof())
    {
      cntp++;
    }
  }
  rustext("\nЗагружено ");
  cout<<cntp;
  rustext(" элементов массива.\n");
  fin.close();
 
int *A=(int*)malloc(cntp*sizeof(int));
//int &A[];
//   int *A=new int [cntp];
// int A[256]; //массив
  rustext(" элементов массива.\n");
 // clrscr();
  rustext("\n                      < < < интерполяционный   п о и с к > > >\n\n");
  GetArray(A, N, f); //загрузи массив
 rustext("\nЗагружен следующий массив A[");cout<<N;rustext("]:\n");
  ShowArray(A, N);
 
  rustext("\nПроведем сортировку массива:\n");
  SortArray(A, N); //отсортируем массив для поиска
 
 //искомое значение
  int i; //позиция найденного элемента в массиве
 
    int j=0; //количество итераций
   rustext("Итоговый массив:\n");
    ShowArray(A, N);
   rustext("\nНайти элемент массива  v=");
    cin>>v;
 
   rustext("\nНачинаем  поиск.\n");
    i=FindValue(A, N, v);
    if (i<=0) {rustext("\nЭлемент ");cout<<v;rustext(" в массиве не найден!\n");}
    else {rustext("\nЭлемент "); cout<<v;rustext(" найден в ");cout<<i;rustext("-й позиции\n");}
 
 
 getchar ();
 getchar ();
 
}
Вкурсе что проблема где -то тут, никак не догоню как правильно сделать

C++
1
2
3
4
5
6
7
int GetArray(int *mas, int &cnt,char *fn )
{
----------------------------------
void main()
{
----------
int *A=(int*)malloc(cntp*sizeof(int));
Добавлено через 4 часа 54 минуты
Короче сам исправил, нужно было Местами строки переставить cnt++ и mas[cnt]=v. В С++ индексы элементов массивов начинаются с 0.

Исправлено:
(Интерполяционный метод поиска динамический одномерный массив в функцию чтение из файла )

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <io.h>
#include <iostream.h>
#include <iomanip.h>
#include <windows.h>
int rustext(char str[])
{
CharToOem(str,str);
cout << str;
}
 
int GetArray(int *mas, int &cnt,char *fn ) //функция загрузки массива из файла
{
  cnt=0;
  int v;
 
 // rustext("Введите имя файла с массивом чисел: ");
//  cin>>fn;
  rustext("\nЗагрузка массива:\n");
  ifstream fin(fn);
  while (!fin.eof()) //загрузим все элементы из файла и определим их количество
  {
    fin>>v;
    if (!fin.eof())
    {
 
      mas[cnt]=v;
        cnt++;
      cout<<"   "<<v;
    }
  }
  rustext("\nЗагружено ");
  cout<<cnt;
  rustext(" элементов массива.\n");
  //*mas=0;
  fin.close();
}
 
 
void ShowArray(int *mas, int cnt) //функция вывода массива на экран
{
  cout<<"[";
  for (int i=0; i<cnt; i++) {printf("%3d ", mas[i]);}
  cout<<"]\n";
}
 
void SortArray(int *mas, int cnt) //функция сортировки массива (методом выбора)
{
  int tmp;
  int min=1;
  for (int i=0; i<cnt; i++)
  {
    min=i;
    for (int j=i; j<=cnt; j++)
    {
      if (mas[j]<mas[min]) {min=j;}
    }
    tmp=mas[min];
    mas[min]=mas[i];
    mas[i]=tmp;
  }
}
 
 
int FindValue(int *mas, int cnt, int v) //рекурсивная функция для поиска элемента в массиве
{
  int L,R,M,i;
  L=0;M=0;R=cnt-1;
  while(L<=R)
  {
  if (L==R)
  M=L ;
  else
  M=L+(R-L)*(v-mas[L])/(mas[R]-mas[L]);
 if (M<L||M>R) return (-1);
  if (mas[M]==v)  return(M+1);
  if (mas[M]>v) R=M-1;
  else
  L=M+1;
 
  }
return (-1)     ;
 
}
 
 
void main()
{
  int N; //количество элементов в массиве
   int v;
 int cntp=0;
  char *f="";
  rustext("Введите имя файла с массивом чисел: ");
  cin>>f;
  rustext("\nЗагрузка массива:\n");
  ifstream fin(f);
  while (!fin.eof()) //загрузим все элементы из файла и определим их количество
  {
    fin>>v;
    if (!fin.eof())
    {
      cntp++;
    }
  }
  rustext("\nЗагружено ");
  cout<<cntp;
  rustext(" элементов массива.\n");
  fin.close();
 
//int *A=(int*)malloc(cntp*sizeof(int));
   //int &A[];
   int *A=new int [cntp];
// int A[256]; //массив
  rustext(" элементов массива.\n");
 // clrscr();
  rustext("\n                      < < < интерполяционный   п о и с к > > >\n\n");
  GetArray(A, N, f); //загрузи массив
 rustext("\nЗагружен следующий массив A[");cout<<N;rustext("]:\n");
  ShowArray(A, N);
 
  rustext("\nПроведем сортировку массива:\n");
  SortArray(A, N); //отсортируем массив для поиска
 
 //искомое значение
  int i; //позиция найденного элемента в массиве
 
    int j=0; //количество итераций
   rustext("Итоговый массив:\n");
    ShowArray(A, N);
   rustext("\nНайти элемент массива  v=");
    cin>>v;
 
   rustext("\nНачинаем  поиск.\n");
    i=FindValue(A, N, v);
    if (i<=0) {rustext("\nЭлемент ");cout<<v;rustext(" в массиве не найден!\n");}
    else {rustext("\nЭлемент "); cout<<v;rustext(" найден в ");cout<<i;rustext("-й позиции\n");}
 
 
 getchar ();
 getchar ();
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2009, 21:45     Динамический одномерный массив в функцию
Посмотрите здесь:

C++ Построить динамический одномерный массив
C++ Динамический одномерный массив.
C++ Динамический одномерный массив.
C++ Одномерный динамический массив
Одномерный динамический массив C++
C++ Одномерный символьный динамический массив
C++ Динамический одномерный массив
Динамический одномерный целочисленный массив C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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