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

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

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

Последовательный и бинарный поиск - C++

23.12.2013, 23:38. Просмотров 418. Ответов 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
146
147
148
149
150
151
152
153
#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    int n, m,i,j,pepl;
    cout << "Введите целое число кол-во строк в матрице от 1 до 10!"<< endl;
    cin >> n;
    if (!cin||n < 1||n > 10){
        cout << "Input error"<< endl;
        return 1;
    }
    pepl=n;
    cout << "Введите целое число кол-во столбцов в матрице от 1 до 10!"<< endl;
    cin >> m;
    if (!cin||m < 1||m > 10){
        cout << "Input error"<< endl;
        return 1;
    }
    int **a = new int*[n];
    for (i = 0; i < n; i++)
    {
        a[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            int chisl = rand() % 10;
                a[i][j] = chisl;
                cout << a[i][j] << ' ';
        }
        cout<<"\n";
    }
    int counter = 0;
    int *key = new int[n];
    cout << "Последовательный поиск " << endl;
    cout << "Введите искомый элемент или их последовательность:" << endl;
    int l=0;
    
    for (i=0; i<n; i++){
        cin >> key[l];
        l++;
        if (cin.peek()=='\n') break;
    }
 
    for (j = 0; j < m; j++)
    {       
 
        int keyc= 0;
        for (i =0; i < n; ++i)
        {           
            if (keyc!=0 && key[keyc] != a[i][j])
                keyc =0;
            if (a[i][j] == key[keyc]) 
            {
                keyc++;
                if (keyc==l){
                    counter++;
                    }
            }
        }
    }
    delete []key;
    cout << "Элемент(ы) встречается " << counter <<" раз" << endl<< endl;
    if (l > 1)
    {
        cout << "Всё!";
        cout<<"\n";
        return 0;
    }
    cout << "Матрица после сортировки:" << endl;
 
    int k, tmp=n;
    for (int j = 0; j < m; j++)
    {
        for (int k = n - 1; k > 0; k--)
        {       
            for (int i = 0; i < tmp-1; i++)
            {
                if (a[i][j] >  a[i+1][j])
                {
                    int c = a[i][j];
                    a[i][j] = a[i+1][j];
                    a[i+1][j] = c;
                }
            }
            tmp--;
        }
        tmp=n;
    }
 
    for (i = 0; i < n; i++)
    {       
        for (j = 0; j < m; j++)
        {
            cout << a[i][j] << ' ';
        }
        cout << endl;
    }   
    cout << "Бинарный поиск" << endl;
    cout << "Введите искомый элемент:" << endl;
    int key1;
    cin >> key1;
    counter = 0;
    int mid, current, counter1, counter2;
    if (n==1&&m==1){
        if (key1==a[0][0])cout <<"Элемент встречается 1 раз" << endl;
        else cout <<"Элемент не найден"<<endl;  }
    else{
    for (j=0; j<m; j++){
        mid=n/2-1;      
        counter1=0;
        counter2=0;
        for (int k=0; k<n; k++) {
            if (a[k][j]==key1) counter2++;
        }
        do
        
            if (a[mid][j]==key1){
                current=mid;
                while (current!=0){
                    if (a[mid][j]==key1){
                        mid--;
                    }
                    else break;
                    current--;
                }
                while (mid<n){
                    if (a[mid][j]==key1){
                        counter++;
                    }
                    mid++;
                }
                counter1++;
            }
            else {
            if (a[mid][j]>key1) mid=mid/2;
            else mid=mid+(n-mid)/2;
            }
        
        while (counter1==0 && counter2!=0);
    }
    cout << "Элемент встречается " << counter <<" раз" << endl;
    }
    for (i = 0; i < n; i++)
    {
        delete []a[i];
    }
    delete []a;
    return 0;
}
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 23:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Последовательный и бинарный поиск (C++):

Бинарно-последовательный поиск - C++
Здраствуйте.Ктонить может написать алгоритм бинарно-последновательного поиска.Плз в инете искал несмог найти... Добавлено через 29...

Индексно-последовательный поиск - C++
вообщем задание такое: &quot;Организовать индексно-последовательный поиск в файле, содержащем список студентов ВУЗа, упорядоченный по фамилии....

Массивы и последовательный поиск - C++
Помогите пожалуйста. Дан массив X.Определить, есть ли в массиве число Z, с использованием метода последовательного поиска.

Поиск числа в двумерном массиве (бинарный поиск) - C++
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и бинарным(двоичным). Первый работает на ура. Второй...

Поиск. Последовательный поиск - C++
Через 2 дня сдавать лабу =-O , а я до сих пор ни могу с ней справиться :umnik: ... Препад, чесное слово &quot; дебил &quot; :-| , дал задания, а...

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

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

Бинарный поиск - C++
Найти индекс расположения числа 15 в массиве на 20 элементов и сумму элементов предшествующих ему. Методом бинарного поиска. Вот код в...

Бинарный поиск - C++
Написал программу бинарного поиска элемента v. Не могу понять в чем ошибка, не считает количество элементов массива удовлетворяющий...

Бинарный поиск - C++
Вот значит код, бинарный поиск элементов динамического целочисленного массива. #include &lt;iostream&gt; #include &lt;vector&gt; #include...

Бинарный поиск c++ - C++
1) последовательного поиска максимального элемента в одномерном динамическом массиве; 2) бинарного поиска количества нулевых элементов...


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

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

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