Ошибка компилятора C2100 (недопустимое косвенное обращение)
не могу понять как решить эту ошибку. Это не конечный код, так-что не обращайте внимание на то что пишу в "". Заранее спасибо спасибо.
using namespace std;
void vibor(int k) {
int key;
cin >> k;
if (k == 1) {
cout << "key ";
cin >> key;
int n;
int arr;
find(arr, n, key);
}
else if (k == 2) {
cout << "key ";
cin >> key;
}
else {
cout << "ne verno. more: ";
vibor(k);
}
}
int find(int arr[], int n, int key) {
if (arr[n - 1] != key) {
arr[n - 1] = key;
int i = 0;
while (arr[i] != key)
{
i++;
if (i < n - 1) {
return i;
}
}
}
else {
return n - 1;
}
}
int main() {
int* arr;
int n;
int k;
cout << "Rozmir: ";
cin >> n;
arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = rand() % 30;
}
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
cout << "yak naity? :" << endl << "1- barer; 2- binar" << endl << "viboe: ";
cin >> k;
vibor(k);
}
Ответы (2 шт):
Поскольку скорее всего будет вопрос "и как это исправить?" :),
find перенесите перед vibor (или дайте объявление функции find до vibor, чтобы компилятор понимал, с чем имеет дело.
В vibor передавайте еще и свой массив -и его размер:
void vibor(int k, int * arr, int n) {
выбросив из этой функции строки
int n;
int arr;
И еще - обратите внимание, что формально у вашей find есть ветка без returnничего не вернет, если не найдет нужное значение - а ничего не возвращать она не имеет права... Я понимаю, что оно туда не выскочит, но вот компилятор... :)
Программа которою мне удалось сделать:
#include <iostream>
#include <ctime>
using namespace std;
//создаем динамический массив
int Ini_len_arr() {
cout << "Enter element of array :";
int //длина массива
cin >> n; cout << endl;
if (n < 0) { //если указали число <0, то выводим сообщение
cout << "Not correct,try again!";
Ini_len_arr();
}
return n;
}
//отображение массива
void print(int n, int* arr) {
for (int i = 0; i < n; i++) { //цикл прохождения по массиву
arr[i] = rand() % 30; //заполнение случайными числами
cout << arr[i] << " "; //вывод массива на экран
}
}
//сортировка пузырьком (понадобится для поиска двоичным методом)
void sort(int n, int* arr) {
int tmp; //выделения памяти для обмена
for (int j = 0; j < n - 1; j++) { //проход по массиву
for (int i = 0; i < n - 1; i++) {
if (arr[i] > arr[i + 1]) { //сравнение 2х элементов
tmp = arr[i]; //если элементы стоят не правильно то меняем их местами
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
}
//поиск двоичным методом
void findbin(int n, int* arr, int key) {
int l = arr[0]; //обозначаем грани отсортированного массива l-мин h-макс значение
int h = arr[n-1];
int iter=0; // переменная для вычисления итераций
unsigned int start_time1 = clock(); //момент начала отчёта времени поиска
while (l <= h) { // цикл прекратится когда число будет найдено
iter++; // почёт итераций
int m = (l + h) / //поиск центра
if (arr[m] == key) { //когда число будет найдено на кране отобразится индекс элемента
cout << "Positions:\t " << m + 1 << endl << "Iteratoins:\t " << iter << endl;
break;
}
if (arr[m] < key) { //если сокращение массива указало на число меньше чем заданное
l = m + 1;
}
if (arr[m] > key) { //если сокращение массива указало на число больше чем заданное
h = m - 1;
}
}
unsigned int end_time1 = clock(); //момент остановки времени
unsigned int search_time1 = end_time1 - start_time1; //сколько времени прошло
cout << "Time:\t " << search_time1 << "ms" << endl; //вывод времени
}
//поиск с барьером
void findbar(int arr[], int n, int key) {
int iter = 0;
if (arr[n - 1] != key) {//проверка не является ли заданный элемент не является последним
arr[n - 1] = key; //становление на последнее место элемент который ищем
int i = 0;
unsigned int start_time = clock();
while (arr[i] != key) //цикл продолжается пока не найдёт число
{
i++; //поиск индекса
iter++; //вычисление кол-во итераций
}
cout << "Positions:\t " << i + 1 << endl << "Iteratoins:\t " << iter << endl;
unsigned int end_time = clock();
unsigned int search_time = end_time - start_time;
cout << "Time:\t " << search_time << "ms" << endl;
}
else {
cout << "Positions:\t " << n << endl << "Iteratoins:\t " << 1 << endl;
cout << "Time:\t " << 1 << "ms" << endl;
}
}
//тело программы
void menu(int k, int* arr, int n) {
int key; //число которое будем искать
//выбор способа
if (k == 1) { //поиск с барьером
cout << "key ";
cin >> key;
findbar(arr, n, key);
}
else if (k == 2) { // поиск двоичным методом
cout << "key ";
cin >> key;
sort(n, arr);
findbin(n, arr, key);
}
else { // если выбор не соответствует вариантам
cout << "Not correct, try again: ";
cin >> k;
if (k >= 3) {
menu(k, arr, n); // просим повторить попытку
}
else {
menu(k, arr, n);
}
}
}
int main() {
int k;
//создание массива
int n = Ini_len_arr();
int* arr = new int[n];
//отображение массива
print(n, arr);
cout << endl;
//визуальное меню
cout << "Search:" << endl << "1-barier ; 2- binary" << endl << "your choise: ";
cin >> k; //выбор варианта поиска
menu(k, arr, n);
}