0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
1

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

16.10.2011, 22:57. Показов 811. Ответов 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;
}
в комментариях скрыта сама программа которая выполнена в функции. я уверен что у меня кривая функция, помогите пожалуйста разобраться
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2011, 22:57
Ответы с готовыми решениями:

Ошибка CS1586 При создании массива следует указать размер массива или инициализатор массива
Не понимаю в чём ошибка. Ошибка CS1586 При создании массива следует указать размер массива или...

Сформируйте третий массив, в котором в начале расположены элементы первого массива, а затем элементы второго массива
Даны два целочисленных массива. Сформируйте третий массив, в котором в начале расположены элементы...

Как указать индекс массива в программе с клавиатуры?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdbool.h&gt; #include &lt;math.h&gt; #include...

Определить текущий индекс, на котором находится курсор массива
var arr, , , ] for (var i = 0, L = inputArray.length; i &lt; L; i++) { for(var j=0; j&lt;L; j++)...

11
программист С++
841 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
16.10.2011, 23:13 2
http://www.cplusplus.com/refer... /mismatch/
зачем изобретать велосипед
1
0 / 0 / 2
Регистрация: 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;
}
что-то функция не то возвращает, не скажите где ошибка?)
0
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:07 4
во первых, вы выводите не индекс массива, а значение.
во вторых, у вас имеет место выход за пределы массива.
в третьих, функция не контролирует возвращаемое значение.
1
0 / 0 / 2
Регистрация: 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?
0
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 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;
}
Миниатюры
указать индекс второго массива, при котором оба массива перестают совпадать  
0
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
17.10.2011, 00:20 7
"Указать индекс второго массива при котором оба массива перестают совпадать."
Я так понимаю надо показать не последний индекс где они совпадают, а индекс где они расходятся...
0
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:22  [ТС] 8
да я бы тоже по-проще сделал, но надо именно такой(int *mismatch(int *first1, int *last1, int *first2, int *last2)) функцией реализовать программу и никак иначе
0
Android Programmer
139 / 140 / 10
Регистрация: 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;
}
1
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:27  [ТС] 10
Цитата Сообщение от KeyGen Посмотреть сообщение
Я так понимаю надо показать не последний индекс где они совпадают, а индекс где они расходятся...
указать индекс второго массива, при котором оба массива перестают совпадать
0
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 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++;
    }
}
0
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
17.10.2011, 00:36  [ТС] 12
Цитата Сообщение от KeyGen Посмотреть сообщение
Вот тебе в функции:
Вы не видите что я пишу =)

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

Добавлено через 35 секунд
уже написали готовую, спасибо Вам за помощь)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2011, 00:36
Помогаю со студенческими работами здесь

Найти наименьший индекс, с которого элементы первого массива совпадают с элементами второго
Здравствуйте! Нужно найти наименьший индекс, с которого элементы первого массива совпадают с...

Построение из двух, одного массива, при этом элементы второго массива переставлены в соответствии с правилом.
Всем привет, топик как заполнять тему что бы никто не отвечал я прочитал) Но всё же напишу, что...

Дан двумерный массив размером 12х12. Найти наименьший элемент массива и указать его индекс
Задать элементы двумерного массива, используя компонент StringGrid, и выполнить обработку массива....

Умножить каждый отрицательный элемент в массиве на индекс второго с конца массива положительного элемента
Умножить каждый отрицательный элемент в массиве на индекс второго с конца массива положительного...

Исключение "индекс находился вне границ массива" при заполнении массива значением
Всем доброго времени суток, делаю курсовую на языке программирования C#. Задача: В (0,...

Переписать элементы массива Х в массив У в обратном порядке.Вывести оба массива
Переписать элементы массива Х в массив У в обратном порядке.Вывести оба массива. Определить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru