Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] 2 массива целых чисел 
V
    Опции темы
Denzel666
Дата 19.12.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



Даны 2 массива целых чисел А и В, каждый из которых не содержит повторяющихся элементов...Вернго ли что все элементы массива А входят в массив В....

Прога не работает...не пойму почему...вроде прокрутил ее в голове много раз а результата нет...Помогите пожалуйста найти ошибку(и)...

Код

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{const int n=5,m=6;
int i,j,a[n]={2,3,4,5,6},b[m]={3,4,9,2,5,6};
for(i=0;i<n && a[i]!='\0';i++)
{for(j=0;j<m && a[i]!=b[m];j++)
;}
if(j>=n)
cout<<"false";
else
{
i++;
if(i>=n)
cout<<"true";
}
cin.get();
cin.get();
return 0;
}


Добавлено @ 01:11 
з.ы.:
Язык Си как вы может быть заметили...

Добавлено @ 01:18 
{for(j=0;j<m && a[i]!=b[m];j++)

опечатка...не b[m] а b[j]...

Это сообщение отредактировал(а) alexeis1 - 19.12.2006, 01:36
PM MAIL   Вверх
Alexeis
Дата 19.12.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(Denzel666 @  19.12.2006,  01:09 Найти цитируемый пост)
з.ы.:
Язык Си как вы может быть заметили...


 ! 
alexeis1
Модератор: может мы и заметили, но мы должны его видеть в заголовке. 

Это уже не первая тема! Пора учиться писать посты. Почему код не выделен? Вы читали http://forum.vingrad.ru/index.php?showtopic=126445 ? 



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Denzel666
Дата 19.12.2006, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



и не if(j>=n) а if(j>=m)

Добавлено @ 01:37 
Извиняюсь...Alexeis ,прошу откликнуться на эту тему...

Код

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{const int n=5,m=6;
int i,j,a[n]={2,3,4,5,6},b[m]={3,4,9,2,5,6};
for(i=0;i<n && a[i]!='\0';i++)
{for(j=0;j<m && a[i]!=b[m];j++)
;}
if(j>=n)
cout<<"false";
else
{
i++;
if(i>=n)
cout<<"true";
}
cin.get();
cin.get();
return 0;
}


Это сообщение отредактировал(а) alexeis1 - 19.12.2006, 13:51
PM MAIL   Вверх
Denzel666
Дата 19.12.2006, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



Код

for(i=0;i<n;i++){for(j=0;j<n;j++){if(a[i]==b[j]){
i++;j++;/*без (i++;j++;) иначе выводится сообщение о включении 1 массива во второй уже при первом совпадении, другие-то тож надо проверять-вот так я подумал)*/
cout<<"true";
}
else
{
cout<<"false";
}
}
}


вот такой вариант мне пришелся первым на ум но это мне показалось не правильным...
PM MAIL   Вверх
apook
Дата 19.12.2006, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Код

#include "stdio.h"
#include "conio.h"

using namespace std;


int main( int argc, char *argv[] )
{
const int n=5, m=12;
int ret=-1, ex=0, i ,j, q;
int a[n]={ 2,3,4,5,6 }, b[m]={ 3,4,9,2,3,4,5,6,4,8,9,7 };
//         ^ ^ ^ ^ ^                 ^ ^ ^ ^ ^
// Мы знаем что он входит осталось это доказать


for( i=0, q=0; i <m; i++ )
{
    if( n >m ) break;

    j =i;
    while( q <m )
    {
        if( a[q] ==b[j] )
        { 
            if( ret <0 ) ret = j; //индекс первого вхождения

            if( q ==(n -1) )
            {
                ex = 1; // <--совпали все эл-ы (запомним это)
                break;
                }

           q++; //счетчик верных вхождений ( от него и за ним все должны совпасть )
           j++;
           }
        else
        {
           //неудача
           ret =-1;
           q =0; //счетчик верных вхождений обнуляется  
           break; 
           }
       }

    if (ex ==1) break; //удачна! пора прекращать сравнение

    }

if (ex ==1)
{
// q +ret -будет индексом последнего вхождения
    printf( "Массив a входит в массив b\nПервое вхождение по индексу %d,\
 последнее вхождение по индексу %d\n", ret, ret+q );
    }
else printf( "Массив a не входит в массив b\n" );
getch();

return ret;
}

Как видишь все не так просто как сперва казалось  

Это сообщение отредактировал(а) apook - 19.12.2006, 06:59


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Oleg_Ci
Дата 19.12.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Как видете всё гораздо проще,
Язык Си как вы может быть заметите smile 
Код

#include <stdio.h>
#include <stdlib.h>

int cmp( const void * a, const void * b ){
    return *(int*) a - *(int*) b;
}

int main(int argc, char *argv[])
{
    const int n=5,m=6;
    int i, j, a[n]={2,3,4,5,6}, b[m]={3,4,9,2,5,6};

    qsort( a, n, sizeof(int), cmp );
    qsort( b, m, sizeof(int), cmp );

    for( i=0, j=0; i<n && j<m; ){
        if( a[i] == b[j] ) { i++; j++; }
        else if( a[i] > b[j] ) j++;
        else break;
    }
    
    if( i==n ) puts("True !");
    else puts("False !");

    getchar();
    return 0;
}


Denzel666
Код

for(i=0;i<n && a[i]!='\0';i++)

хочеш сказать что массивы завершаются символом '\0'  ?
PM MAIL   Вверх
Denzel666
Дата 20.12.2006, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



Благо есть челы у которых можно спросить совета...Не скажите puts . скажите плиз где эту книгу мона заиметь...ссылка полезна будет как никогда...Герберта Шилдта предлагали...что посоветуете...Извиняюсь что может быть нарушаю правила форума но кровь из носа нужна литература...Хачу учиться, как бы это странно не звучало

Добавлено @ 00:44 
Цитата

Не скажите puts .


Не скажите puts  это чего такое чем отличается от printf... Олег4 я ж говорю что препод мягко сказать не удачно попавшийся...Поэтому такие вопросы у меня глуповатые...сам это понимаю
PM MAIL   Вверх
Rockie
Дата 20.12.2006, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Олег4, числа могут быть абсолютно любыми, их последовательность не имеет значения. 

Код
#include<stdio.h>

#define sizeOne 5
#define sizeTwo 7

int main()
{
  int a[sizeOne] = {2,1,3,-4,15};
  int b[sizeTwo] = {1,2,8,15,3,-4,9};

  for(int i=0;i<sizeOne;i++)
   {
     int flag = 0;
     for(int j=0;j<sizeTwo;j++)
       if(a[i]==b[j]) flag = 1;

     if(flag == 0)
       { puts("a is not included in b");
         return 0;
       }
   }

  puts("a is included in b");
  return 0;
}






--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Oleg_Ci
Дата 20.12.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Rockie, да у тебя проще, поздравляю, всех обставил smile 
Цитата(Denzel666 @  20.12.2006,  03:39 Найти цитируемый пост)
Не скажите puts  это чего такое чем отличается от printf

puts - короче чем printf, на 2 символа, меньше писанины smile 
ну и puts выводит строку и переводит каретку на новую строку, т.е. добавляет в конец строки символ '\n'



Это сообщение отредактировал(а) Олег4 - 20.12.2006, 19:39
PM MAIL   Вверх
Denzel666
Дата 21.12.2006, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



Олег4,

спасибо за инфу..:
Цитата

puts - короче чем printf, на 2 символа, меньше писанины  
ну и puts выводит строку и переводит каретку на новую строку, т.е. добавляет в конец строки символ '\n'


а можно комментарии к проге, Олег4?
PM MAIL   Вверх
Oleg_Ci
Дата 21.12.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



набросал комментариев в свой вариант
Код

#include <stdio.h>
#include <stdlib.h>

int cmp( const void * a, const void * b ){ // функция для сортировки
    return *(int*) a - *(int*) b;
}

int main(int argc, char *argv[])
{
    const int n=5,m=6; // размеры массивов
    int i, j, // счётчики цыклов
        a[n]={2,3,4,5,6}, b[m]={3,4,9,2,5,6}; // массивы чисел

    qsort( a, n, sizeof(int), cmp ); // сортировка массива а
    qsort( b, m, sizeof(int), cmp ); // сортировка массива b

    // поиск чисел из массива 'a' и массиве 'b'
    // с начала индексы ( 'i' 'j' ) указывают на первые чисала в массивах
    // пока числа одинаковы в обоих массивах, увеличиваем индексы для обоих
    // если число из мас 'a' больше то увеличиваем индекс для мас 'b' в надежде найти число дальше
    // если число из 'a' меньше, то далее остальные числа в массиве 'b' тоже меньше( ведь массивы отсортированы)

    for( i=0, j=0; i<n && j<m; ){ // цыкл перебора чисел массивов
        if( a[i] == b[j] ) { i++; j++; } // если числа равны, инкрементируем индексы обоих массивов
        else if( a[i] > b[j] ) j++; // если число из массива 'а' больше то инкрем. (увеличиваем на 1) индекс для массива 'b' 
        else break; // если число из 'a' меньше то искать его в массиве 'b' уже не имеет смысла и завершаем поиск
    }
    
    if( i==n ) puts("True !"); // если при поиске в цикле были проверены(и равны 'b') все числа из массива 'a' то индек 'i' должен быть равен 'n'
    else puts("False !"); // если цикл оказался незавершон, то числа не равны( те индекс 'i' не увеличился до 'n' )

    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
Rockie
Дата 21.12.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(Олег4 @  20.12.2006,  19:36 Найти цитируемый пост)
Rockie, да у тебя проще, поздравляю, всех обставил  smile  

Олег4, что что, а это мне меньше всего надо =)


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Denzel666
Дата 24.12.2006, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



А можно эту задачу решить без первичной сортировки...Или делать сортировку вручную?
PM MAIL   Вверх
Rockie
Дата 24.12.2006, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(Denzel666 @  24.12.2006,  01:59 Найти цитируемый пост)
А можно эту задачу решить без первичной сортировки...Или делать сортировку вручную?

Denzel666, гы, ты посты читаешь?  smile  В твоем задании вообще сортировка не нужна.






--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Denzel666
Дата 24.12.2006, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



А можно попроще это решить...мне ф-ция qsort не нравится...без нее как нить можно обойтись?
PM MAIL   Вверх
apook
Дата 24.12.2006, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



А чем тебе не нравится мой пример?
У примера Rockie (если я правильно понял) есть один недостаток а именно 
если один массив начал входить во второй массив и возникло не совпадение 
то сравнение прекращается, тогда как  дальше вхождение может опять
начаться 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Oleg_Ci
Дата 24.12.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(Denzel666 @  24.12.2006,  05:58 Найти цитируемый пост)
А можно попроще это решить...мне ф-ция qsort не нравится...без нее как нить можно обойтись?

так ведь без сортировки уже решили - apookRockie
или их примеры тоже неочень хорошие ?
Помойму проще чем у Rockie, уже не сделаеш.
PM MAIL   Вверх
Denzel666
Дата 25.12.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



как работает функция qsort?
Этот вопрос меня волнует больше всего!

Добавлено @ 01:02 
Респект программерам...Все понятно разъяснили по теме... smile 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1041 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.