Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2012, 12:19   #1
Sport
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 12
По умолчанию C++ Массивы

Помогите написать прогу плз на Visual C++
Задание:
Даны два упорядоченных по возрастанию массива: a[1..n] и b[1..m].
Найти количество элементов, встречающихся как в a[1..n], так и в b[1..m]
Sport вне форума Ответить с цитированием
Старый 10.02.2012, 12:36   #2
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

самое простое: в два цикла сверить каждый эл-нт первого массива со вторым.
Улучшить можно так:
Начать с ar1[0], поискать его во втором массиве с условием "пока эл-т второго массива меньше ar1[0]".
следующий эл-т начинать сверять с эл-та который не удовлетворил условию предыдущего.
Код специально не написал
Sna1L вне форума Ответить с цитированием
Старый 10.02.2012, 12:40   #3
Sport
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 12
По умолчанию

я не такой спец по с++ ..
если можно напишите пожалуйста код..
Sport вне форума Ответить с цитированием
Старый 10.02.2012, 12:49   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Sport

Даны два упорядоченных по возрастанию массива: a[1..n] и b[1..m].
Найти количество элементов, встречающихся как в a[1..n], так и в b[1..m]


код на C++

Код:
#include <locale>
#include <iostream>
#include <algorithm>
#include <iterator>

#include <stdlib.h>
#include <time.h>

#define FROM -10
#define TO 10

struct R
{
	int operator()() const
	{
		return rand() % (TO - FROM + 1) + FROM;	// -10..10
	}
};

template <typename InIt>
std::ostream& operator<< (std::ostream& os, const std::pair<InIt, InIt>& v)
{
	typedef std::ostream_iterator<int> O;
	std::copy(v.first, v.second, O(os, " "));
	return os;
}

template <size_t N>
std::ostream& operator<< (std::ostream& os, const int (&arr)[N])
{
	return os << std::make_pair(arr, arr + N);
}

template <size_t N>
int (&generate(int (&arr)[N]))[N]
{
	std::generate(arr, arr + N, R());
	std::sort(arr, arr + N);
	return arr;
}

template <size_t N, size_t M>
void common(const int (&a)[N], const int (&b)[M])
{
	int c[N + M] = {0};

	std::cout << "Common: " << std::make_pair(c, std::set_intersection(a, a + N, b, b + M, c)) << std::endl;
}

int main()
{
	int a[10] = {0};
	int b[20] = {0};

	setlocale(LC_ALL, "");
	srand((unsigned) time(NULL));

	std::cout << "A: " << generate(a) << std::endl;
	std::cout << "B: " << generate(b) << std::endl;
	
	common(a, b);

	return 0;
}
Пример работы: http://codepad.org/bSJdi2Le
Rififi вне форума Ответить с цитированием
Старый 10.02.2012, 12:49   #5
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

"спецом в С++" быть и необязательно...
Я выпишу основную часть кода(подразумеваю, что вы сможете заполнить массивы и оформить код). Но если Вам сложно просто открыть книжку и почитать полчаса для написания элементарной программы, то не понимаю, зачем Вам программирование. Если Вы хотите работать программистом, то плюньте и идите разносить газеты(без обид).

Код:
int i, j=0;
for( i = 0; i <= n; i++ )
{
       while(a[i] > b[j]) {
              j++;
              if( j>m)
                   break;
       }
       if( j > m)
            break;
       if( a[i] == b[j] )
              result++';
}
что-то вроде этого.
Sna1L вне форума Ответить с цитированием
Старый 10.02.2012, 12:54   #6
Sport
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 12
По умолчанию

спасибо!!!
Sport вне форума Ответить с цитированием
Старый 10.02.2012, 15:13   #7
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Sport Посмотреть сообщение
Помогите написать прогу плз на Visual C++
Задание:
Даны два упорядоченных по возрастанию массива: a[1..n] и b[1..m].
Найти количество элементов, встречающихся как в a[1..n], так и в b[1..m]
Конечно вам все надо делать самостоятельно с использованием циклов. Но если бы это было задание на знание стандартных алгоритмов, то я бы написал программу так (Использовался компилятор MS VC++ 2010. Другие версии MS VC++ могут не компилировать этот код):

Код:
#include "stdafx.h"
#include	<iostream>
#include	<iterator>
#include	<algorithm>
#include	<vector>
#include	<cstdlib>

int _tmain(int argc, _TCHAR* argv[])
{

	const int N = 10;
	const int M = 15;
	int a[N];
	int b[M];

	std::generate_n( a, N, [=]{ return ( std::rand() % N ); } );
	std::generate_n( b, M, [=]{ return ( std::rand() % M ); } );
		
	std::sort( a, a + N );
	std::sort( b, b + M );

	std::cout << "a[] = { ";
	std::for_each( a, a + N, []( int x ){ std::cout << x << ", "; } );
	std::cout << "};" << std::endl;

	std::cout << "b[] = { ";
	std::for_each( b, b + M, []( int x ){ std::cout << x << ", "; } );
	std::cout << "};" << std::endl;

	std::vector<int> c;
	std::set_intersection( a, a + N, b, b + M,
		                   std::back_inserter( c ) );

	std::cout << "c[] = { ";
	std::for_each( c.begin(), c.end(), []( int x ){ std::cout << x << ", "; } );
	std::cout << "};" << std::endl;
	std::cout << "Number of common elemennts is " << c.size() << std::endl;

	return ( 0 );

}
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 10.02.2012 в 16:14.
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12