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

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

Войти
Регистрация
Восстановить пароль
 
viktor9006
#1

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

21.12.2009, 21:45. Просмотров 632. Ответов 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
#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++
Не сортирует массив, и не выводит исходный. Не могу найти косяк #include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;conio.h&gt; ...

Не инициализируется динамический одномерный массив - C++
#include &quot;stdafx.h&quot; int _tmain(int argc, _TCHAR* argv) { int n = 10; float *a = new float; return 0; } После объявления...

Одномерный динамический массив(конструктор и деструктор) - C++
Может кто чем поможет по решению задачи?или подскажите где искать заранее спасибо. 1. произведение элементов массива, расположенных между...

Как создать одномерный динамический массив? - C++
Как создать одномерный динамический массив?

Можно ли индексировать одномерный динамический массив с 1? - C++
Каким образом можно иднексировать одномерный динамический массив начиная с 1.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2009, 21:45
Привет! Вот еще темы с ответами:

Очищение памяти (одномерный динамический массив) - C++
Здравствуйте, у меня возникла проблема с высвобождением памяти при одномерном динамическом массиве: #include &lt;iostream&gt; #include...

Построить динамический одномерный массив из элементов матрицы - C++
Дана динамическая целочисленная матрица.Построить динамический одномерный массив,каждый эллемент которого равен сумме элементов одной...

Заполнить одномерный динамический массив и сделать проверку - C++
Есть одномерный динамический массив. Его надо через одну функцию заполнить случайными числами, через вторую функцию вывести результат...

Динамический одномерный массив, запоминать до конца ввода - C++
Здравствуйте, уважаемые программисты! Как сделать, чтобы вводимые символы запоминались до нажатия клавиши &quot;Enter&quot;???(массив динамический) ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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