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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2011, 22:34   #1
Gang182
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 5
По умолчанию сравнение массивов

Здравствуйте. Есть код на Turbo С
Код:
#include<stdio.h>
#include<conio.h>
void main()
{
int na,nb,nc,a[10],b[20],c[10];
int k,flag,i,j;
<Не очень интересно>
nc=0;
for(i=0;i<na;i++)
{     k=0;
	for(j=0;j<na;j++)
	 if(a[i]==a[j])
	   k++;
	  if(k==1)
		 {
		  flag=0;
		  for(j=0;j<nb;j++)
		   if(a[i]==b[j])
		  flag=1;
		   if(flag==1)
			 {
			  c[nc]=a[i];
			    nc++;
	 }
	 }
    }
     if(nc==0)
      printf("\n massiv C pust");
    else
    {
      printf("\n massiv C imeet vid:\n");
      for(i=0;i<nc;i++)
	printf("%4d",c[i]);
     }
      printf("\n konec rewenia");
    printf("\n Pres anykey...");
    getch();
    }
Здесь сравниваются значения из массива А с элементами массива В. Элементы массива А, которы встречаются в массиве В записываются в массив С. Что сдесь исправить, чтобы в массив С записывались элементы массива А которых нет в массиве В.
Если кто хочет можно написать и новые циклы вместо этих))

Зарание спасибо.

Последний раз редактировалось Gang182; 28.09.2011 в 22:48.
Gang182 вне форума Ответить с цитированием
Старый 28.09.2011, 22:47   #2
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от Gang182 Посмотреть сообщение
Здравствуйте. Есть код на Turbo С

Здесь сравниваются значения из массива А с элементами массива В. Элементы массива А, которы встречаются в массиве В записываются в массив С. Что сдесь исправить, чтобы в массив С записывались элементы массива А которых нет в массиве В.

Зарание спасибо.
Привет! Только что писал подобное только на C++
Код:
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#include <tchar.h>

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   int Arr1[15], Arr2[15], ArrRes[15];
   int i,j,n;
   cout << "Vvedite perviy massiv iz 15 elementov:\n";
   for (i=0; i<15; i++)
   {
	  cin >> Arr1[i];
   }
   cout << "Vvedite vtoroy massiv iz 15 elementov:\n";
   for (i=0; i<15; i++)
   {
	  cin >> Arr2[i];
   }
   n=0;  // Просто счетчик
   for (i=0; i<15; i++)
   {
	  for (j=0; j<15; j++)
	  {
		 if (Arr1[i]==Arr2[j])
		 {
			ArrRes[n]=Arr1[i];
			n++;
		 }
	  }
	}
	cout << "Result massiv = ";
	for (i=0; i<n; i++)
	   cout << ArrRes[i]<<" ";
	getch();
	return 0;
}
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 28.09.2011, 23:11   #3
Gang182
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ByAlex Посмотреть сообщение
Привет! Только что писал подобное только на C++
Ага, тоже самое. Только нужно, что бы записывались элементы А, которых нет в В. Хотя твой код, после лёгкого исправления работает в ТС, так же как и мой. Что подправить, что бы записавались элементы А которых нет в В?

Код:
#include<stdio.h>
#include<conio.h>
void main()
{
int na,nb,nc,a[10],b[20],c[10];
int k,flag,i,j;
<не очень интересно>
nc=0;
k=0;
for(i=0;i<na;i++)
{     
	for(j=0;j<na;j++)
	{
		  for(j=0;j<nb;j++)
		   if(a[i]==b[j])
			 {
			  c[nc]=a[i];
			    nc++;
			    k++;
	 }
	 }
    }
     if(nc==0)
      printf("\n massiv C pust");
    else
    {
      printf("\n massiv C imeet vid:\n");
      for(i=0;i<nc;i++)
	printf("%4d",c[i]);
     }
      printf("\n konec rewenia");
    printf("\n Pres anykey...");
    getch();
    }
Gang182 вне форума Ответить с цитированием
Старый 28.09.2011, 23:19   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Здесь сравниваются значения из массива А с элементами массива В. Элементы массива А, которы встречаются в массиве В записываются в массив С. Что сдесь исправить, чтобы в массив С записывались элементы массива А которых нет в массиве В.

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

#include <iterator>
#include <algorithm>

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

#define MIN -10
#define MAX 10

struct R
{
	int operator()() const
	{
		return rand() % (MAX - MIN + 1) + MIN;
	}
};

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

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

template <size_t N>
int* X(int (&A)[N], int (&B)[N], int (&C)[N])
{
	std::sort(A, A + N);
	std::sort(B, B + N);

	return std::set_difference(A, std::unique(A, A + N), B, std::unique(B, B + N), C);
}

int main()
{
	setlocale(LC_ALL, "");
	srand((unsigned) time(NULL));

	int A[15], B[15], C[15];

	generate(A);
	generate(B);

	std::cout << "A: " << A << std::endl;
	std::cout << "B: " << B << std::endl;

	int* end = X(A, B, C);

	std::cout << "C: { ";
	for (int* it = C; it != end; ++it)
		std::cout << *it << " ";
	std::cout << " }" << std::endl;

	return 0;
}
пример: http://codepad.org/Y07WSNQa
Rififi вне форума Ответить с цитированием
Старый 28.09.2011, 23:35   #5
Gang182
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 5
По умолчанию

Rififi, это на VC++, такое в Турбо С не прокатит.
Вот что есть:
Код:
nc=0;
k=0;
for(i=0;i<na;i++)
{     
	for(j=0;j<na;j++)
	{
		  for(j=0;j<nb;j++)
		   if(a[i]==b[j])
			 {
			  c[nc]=a[i];
			    nc++;
			    k++;
	 }
	 }
    }
     if(nc==0)
      printf("\n massiv C pust");
    else
    {
      printf("\n massiv C imeet vid:\n");
      for(i=0;i<nc;i++)
	printf("%4d",c[i]);
     }
      printf("\n konec rewenia");
    printf("\n Pres anykey...");
    getch();
    }
два массива А[2] и В[3] А=(1,2) В=(2,3,4). если оставит как есть ответ С=(2). Но если символ "==" в строке if(a[i]==b[j]) заменить на "!=" то С=(1,1,1,2,2). Почему так?
Gang182 вне форума Ответить с цитированием
Старый 28.09.2011, 23:42   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Gang182

это на VC++

не-а, это на просто C++, а Turbo C использует диалект Говно-C++, я на таком к сожалению не пишу, придется тебе как-нибудь самому... :D
Rififi вне форума Ответить с цитированием
Старый 28.09.2011, 23:46   #7
Gang182
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 5
По умолчанию

Rififi, да собстно один чёрт, VC++ или просто С++... нужно было бы на них написать спал бы сейчас... или кино смотрел...
Gang182 вне форума Ответить с цитированием
Старый 29.09.2011, 10:31   #8
Gang182
Новичок
Джуниор
 
Регистрация: 28.09.2011
Сообщений: 5
По умолчанию

Осталось немного. Выводит то что нужно, но сравнив числа массива А выводит столько раз сколько сравнивал. как исправить
Код:
nc=0;
k=0;
{
for(i=0;i<na;i++)
{
	for(j=0;j<na;j++)
	{
		  for(j=0;j<nb;j++)
		   if(a[i]!=b[j])
			 {
			  c[nc]=a[i];
			    nc++;
			    k++;
	 }
	 }
    }
}
     if(nc==0)
      printf("\n massiv C pust");
    else
    {
      printf("\n massiv C imeet vid:\n");
      for(i=0;i<nc;i++)
	printf("%4d",c[i]);
     }
      printf("\n konec rewenia");
    printf("\n Pres anykey...");
    getch();
    }
in A=1;2 B=3;4;5
Out C=1;1;1;2;2;2
Gang182 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
Сравнение двух массивов Рик Общие вопросы Delphi 3 07.04.2011 15:53
сравнение массивов nik1905 Microsoft Office Excel 3 13.12.2010 13:53