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

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

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

указать индекс второго массива, при котором оба массива перестают совпадать - C++

16.10.2011, 22:57. Просмотров 578. Ответов 11
Метки нет (Все метки)

Даны два массива, они упорядочены и надо указать индекс второго массива при котором оба массива перестают совпадать.

Например:
массив А: 1 2 3 4 5 6
массив В: 1 2 3 4 5

ответом будет 4, пятерка стоит на 4м месте массива В.

вот моя программа выполненная в функции, в ответе выводится 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
int *mismatch(int *first1, int *last1, int *first2, int *last2)
{   int *i; int *j;
    i=first1; j=first2;
    for(;i<last1,j<last2;i++,j++)
        if(*i==*j)
            return j;
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
    const int n = 6;
    const int m = 5;
    int a[n], b[m], k=0;;
    
    cout << "Введите массив А из " << n << " чисел\n";
    for(int i = 0; i < n; i++)
        cin >> a[i];
 
    cout << "\nВведите массив B из " << m << " чисел\n";
    for(int i = 0; i < m; i++)
        cin >> b[i];
    cout << *mismatch(a,a+6,b,b+6) << endl;
    /*for(int i = 0,j = 0; i < n, j < m; i++, j++)
        if(a[i]==b[j])
            k=j;
 
    
    cout << "Индекс: " << k << endl;*/
    return 0;
}
в комментариях скрыта сама программа которая выполнена в функции. я уверен что у меня кривая функция, помогите пожалуйста разобраться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 22:57     указать индекс второго массива, при котором оба массива перестают совпадать
Посмотрите здесь:

Ввести два одномерных массива и заменить нулями те элементы второго массива, которые есть в первом - C++
Ввести два одномерных массива и заменить нулями те элементы второго массива, которые есть в первом

Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива - C++
Доброго времени суток, помогите пожалуйста решить задачи по C++ 3)Дан двумерный массив. Определить: a) номер столбца, в котором...

Массив: Определите все серии подряд идущих элементов из первого массива, совпадающие с сериями второго массива - C++
Даны два массива. Определите все серии подряд идущих элементов из первого массива (серия может состоять и из одного элемента), каждая из...

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

Элементы массива, которые при делении нацело на собственный индекс дают значение большее 2 возвести в квадрат - C++
Ввести одномерный массив A из N элементов. Элементы массива, которые при делении нацело на собственный индекс дают значение большее 2...

Индекс массива - C++
Необходимо составить программу, которая бы меняла местами в строке первую и последнюю, вторую и предпоследнюю и т.д., но почему-то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.10.2011, 23:13     указать индекс второго массива, при котором оба массива перестают совпадать #2
http://www.cplusplus.com/reference/algorithm/mismatch/
зачем изобретать велосипед
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
16.10.2011, 23:53  [ТС]     указать индекс второго массива, при котором оба массива перестают совпадать #3
затем, что это домашнее задание на первом курсе)

Добавлено через 37 минут
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
int *mismatch(int *first1, int *last1, int *first2, int *last2)
{   while(first1!=last1)
    {
        if(*first1!=*first2)
        {
            return first2;
            break;
        }
        first1++; first2++;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
    const int n = 6;
    const int m = 5;
    int a[n], b[m], k=0;;
    
    cout << "Введите массив А из " << n << " чисел\n";
    for(int i = 0; i < n; i++)
        cin >> a[i];
 
    cout << "\nВведите массив B из " << m << " чисел\n";
    for(int i = 0; i < m; i++)
        cin >> b[i];
    cout << "Индекс: ";
    cout << *mismatch(a,a+6,b,b+5) << endl;
    
    return 0;
}
что-то функция не то возвращает, не скажите где ошибка?)
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:07     указать индекс второго массива, при котором оба массива перестают совпадать #4
во первых, вы выводите не индекс массива, а значение.
во вторых, у вас имеет место выход за пределы массива.
в третьих, функция не контролирует возвращаемое значение.
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:12  [ТС]     указать индекс второго массива, при котором оба массива перестают совпадать #5
1) cout << mismatch(a,a+6,b,b+5) << endl;
2)while(first1!=last1 && first2!=last2) так?
3) то есть надо возвращаемое значение должно быть написано в самом конце цикла while?
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
17.10.2011, 00:16     указать индекс второго массива, при котором оба массива перестают совпадать #6
Вот я бы сделал так:
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
#include <iostream>
#include <cctype>
 
using std::cout;
using std::cin;
using std::endl;
    
int main()
{
    setlocale(LC_ALL, "rus");
    
    int schet=0;
    char mass1[100]={};
    char mass2[100]={};
    char ch;
    int i;
    
    cout << "Ââåäèòå Г¬Г*Г±Г±ГЁГў 1: ";
    cin.get(ch);
    for(int i=0; i<100&&isdigit(ch); i++){
    mass1[i]=ch;
    cin.get(ch);
    }       
    
    cout << "Ââåäèòå Г¬Г*Г±Г±ГЁГў 2: ";
    cin.get(ch);
    for(int i=0; i<100&&isdigit(ch); i++){
    mass2[i]=ch;
    cin.get(ch);
    } 
    
    for(int i=0; i<100; i++){
    if(mass1[i]!=mass2[i])
    break;
    schet++;
    }
    
    if(schet==100)
    cout << "\nÂñå ГўГҐГ°Г*Г»!";
    else
    cout << "\nГЊГ*Г±Г±ГЁГў Гў ÿ÷åéêè " << schet << " Г°Г*ñõîäèòüñÿ.";
    
    
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
Миниатюры
указать индекс второго массива, при котором оба массива перестают совпадать  
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
17.10.2011, 00:20     указать индекс второго массива, при котором оба массива перестают совпадать #7
"Указать индекс второго массива при котором оба массива перестают совпадать."
Я так понимаю надо показать не последний индекс где они совпадают, а индекс где они расходятся...
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:22  [ТС]     указать индекс второго массива, при котором оба массива перестают совпадать #8
да я бы тоже по-проще сделал, но надо именно такой(int *mismatch(int *first1, int *last1, int *first2, int *last2)) функцией реализовать программу и никак иначе
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:22     указать индекс второго массива, при котором оба массива перестают совпадать #9
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
int mismatch(int *first1, int *last1, int *first2, int *last2)
{       
    int i=0,j=0;
    while((first1+i)!=last1&&(first2+j)!=last2)
    {
        if(*(first1+i)!=*(first2+j))
        {
            return j;
            break;
        }
        i++; j++;
    }
    if((first1+i)!=last1||(first2+j)!=last2)
        return i-1;
    return -1;
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "");
    const int n = 6;
    const int m = 5;
    int a[n], b[m], k=0;;
 
    cout << "Введите массив А из " << n << " чисел\n";
    for(int i = 0; i < n; i++)
        cin >> a[i];
 
    cout << "\nВведите массив B из " << m << " чисел\n";
    for(int i = 0; i < m; i++)
        cin >> b[i];
    cout << "Индекс: ";
    cout << mismatch(a,a+n,b,b+m) << endl;
 
    return 0;
}
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:27  [ТС]     указать индекс второго массива, при котором оба массива перестают совпадать #10
Цитата Сообщение от KeyGen Посмотреть сообщение
Я так понимаю надо показать не последний индекс где они совпадают, а индекс где они расходятся...
указать индекс второго массива, при котором оба массива перестают совпадать
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
17.10.2011, 00:32     указать индекс второго массива, при котором оба массива перестают совпадать #11
Вот тебе в функции:
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
#include <iostream>
#include <cctype>
 
using std::cout;
using std::cin;
using std::endl;
 
void F(char p[], char c[], int &k);
    
int main()
{
    setlocale(LC_ALL, "rus");
    
    int schet=0;
    char mass1[100]={};
    char mass2[100]={};
    char ch;
    int i;
    
    cout << "Ââåäèòå Г¬Г*Г±Г±ГЁГў 1: ";
    cin.get(ch);
    for(int i=0; i<100&&isdigit(ch); i++){
    mass1[i]=ch;
    cin.get(ch);
    }       
    
    cout << "Ââåäèòå Г¬Г*Г±Г±ГЁГў 2: ";
    cin.get(ch);
    for(int i=0; i<100&&isdigit(ch); i++){
    mass2[i]=ch;
    cin.get(ch);
    } 
    
    F(mass1,mass2,schet);
    
    if(schet==100)
    cout << "\nÂñå ГўГҐГ°Г*Г»!";
    else
    cout << "\nПоследняя совпадающая " << schet-1;
    
    
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
 
void F(char p[], char c[], int &k){
    for(int i=0; i<100; i++){
    if(p[i]!=c[i])
    break;
    k++;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 00:36     указать индекс второго массива, при котором оба массива перестают совпадать
Еще ссылки по теме:

индекс массива - C++
Помогите люди!!!!! вывести индекс наименьшего элемента массива.

Заменить в массиве все отрицательные элементы средним арифметическим значением всех положительных, вывести оба массива - C++
Здравствуйте, стоит такая задача: Сгенерировать одномерный целочисленный массив случайного размера из диапазона и заполнить его случайными...

Исключения: индекс массива - C++
Суть такова: нужно написать прогу, контролирующую индексы, которые выходят за пределы массива и генерирует исключения. В ошибке должна быть...

Сигнал, Индекс массива - C++
Не получается задать сигнал // информационные символы double *x0 = new double; for (int q = 0;q &lt; M; q++){ ...


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

Или воспользуйтесь поиском по форуму:
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:36  [ТС]     указать индекс второго массива, при котором оба массива перестают совпадать #12
Цитата Сообщение от KeyGen Посмотреть сообщение
Вот тебе в функции:
Вы не видите что я пишу =)

функция должна быть в таком виде: int *mismatch(int *first1, int *last1, int *first2, int *last2)

Добавлено через 35 секунд
уже написали готовую, спасибо Вам за помощь)
Yandex
Объявления
17.10.2011, 00:36     указать индекс второго массива, при котором оба массива перестают совпадать
Ответ Создать тему
Опции темы

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