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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 21:34   #1
Roll1n
Пользователь
 
Регистрация: 04.01.2009
Сообщений: 30
По умолчанию Работа с одномерным массивом

Задача:
Даны 2 одномерных массива(целые числа)A и B,нужно вычислить массив C,содержащий эл-ты массива A присутствующие в B.

Язык Си начал изучать совсем не давно,вот что получилось

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> 
int main ()
{
    int a[10],b[10],c[10],na,nb,nc=0,i,j;

printf("dlina massiva a:"); scanf("%d",&na);
printf("vvedite massiv a\n");
for (i=0;i<na;i++) scanf("%d",&a[i]);
printf("dlina massiva b:"); scanf("%d",&nb);
printf("vvedite massiv b\n");
{
    for (i=0;i<nb;i++) scanf("%d",&b[i]);
    //
for (j=0;j<nb&&a[i]!=b[j];j++);
{
    if (j==nb)
{
    for (j=0;j<nc&&a[i]!=c[j];j++)
if (j=nc)
c[nc++]=a[i];
}
}
}
if (nc==0)
printf("massiv c pyst\n");
else 
{ printf("massiv C\n");
for (i=0;i<nc;i++)
printf("%7d",c[i]);
printf("\n");
}

 system("PAUSE");
}
Roll1n вне форума Ответить с цитированием
Старый 08.04.2010, 21:45   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> 
int main ()
{
    int a[10],b[10],c[10],na,nb,nc=0,i,j,z,ext;
	printf("dlina massiva a:"); scanf("%d",&na);
	printf("vvedite massiv a\n");
	for (i=0;i<na;i++) scanf("%d",&a[i]);
	printf("dlina massiva b:"); scanf("%d",&nb);
	printf("vvedite massiv b\n");
    for (i=0;i<nb;i++)
	{
		scanf("%d",&b[i]);
		for(j = 0; j < na; j++)
			if(b[i] == a[j])
			{
				for(z = 0,ext = 0; z < nc; z++)
					if(c[z] == b[i])
					{
						ext = 1;
						break;
					}
				if(!ext)
					c[nc++] = b[i];
				break;
			}
	}
	if (nc==0)
		printf("massiv c pyst\n");
	else 
	{
		printf("massiv C\n");
		for (i=0;i<nc;i++)
			printf("%7d",c[i]);
		printf("\n");
	}
 system("PAUSE");
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 08.04.2010, 21:45   #3
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

Все делается намного проще, вам нужно создать цикл для первого массива а[i] и для второго массива b[j] во втором цикле сделать проверку:
if(a[i]==b[j])
c[i]=a[i];
и всё.
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 08.04.2010, 21:48   #4
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

for(i=0;i<na;i++)
{
for(j=0;j<nb;j++)
{
if(a[i]==b[j])
c[i]=a[i];
else
continue;
}
}
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Старый 08.04.2010, 22:08   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Crudelis Посмотреть сообщение
for(i=0;i<na;i++)
{
for(j=0;j<nb;j++)
{
if(a[i]==b[j])
c[i]=a[i];
else
continue;
}
}
Код:
   int a[3] = {2, 1, 3};
   int b[2] = {0, 1};
   int c[3];
1. Чему будет равно c[0]?
2. Сколько эл-тов массива c[] нужно будет вывести?
Vago вне форума Ответить с цитированием
Старый 08.04.2010, 22:13   #6
Roll1n
Пользователь
 
Регистрация: 04.01.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Crudelis Посмотреть сообщение
for(i=0;i<na;i++)
{
for(j=0;j<nb;j++)
{
if(a[i]==b[j])
c[i]=a[i];
else
continue;
}
}
Вот,у меня получилось как-то так
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> 
int main ()
{
    int a[10],b[10],c[10],na,nb,nc=0,i,j;

printf("dlina massiva a:"); scanf("%d",&na);
printf("vvedite massiv a\n");
for (i=0;i<na;i++) scanf("%d",&a[i]);
printf("dlina massiva b:"); scanf("%d",&nb);
printf("vvedite massiv b\n");
{
    for (i=0;i<nb;i++)
     scanf("%d",&b[i]);
    //
 for(j=0;j<nb;j++)
{
if(a[i]==b[j])
c[i]=a[i]
}
}
else
printf("massiv c pyst\n");

{ printf("massiv C\n");
for (i=0;i<nc;i++)
printf("%7d",c[i]);
printf("\n");
}

 system("PAUSE");
}

Только не могу расставить операторные скобки правильно
Roll1n вне форума Ответить с цитированием
Старый 08.04.2010, 22:20   #7
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Roll1n, Чем тебе мой вариант не нравится??
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 08.04.2010, 23:59   #8
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Код:
   int a[3] = {2, 1, 3};
   int b[2] = {0, 1};
   int c[3];
1. Чему будет равно c[0]?
2. Сколько эл-тов массива c[] нужно будет вывести?
тогда сделаем поправку

for(int j=0, k=0;j<nb, j++)
{
if(a[i]==b[j])
{
c[k]=a[i];
k++
}

}

для вывода элементов c[] нужна ещё одна переменная которая и будет считать сколько выводить чисел, её можно всунуть в туже проверку массива а и б. z++ например и уже дальше выводить её
for(i=0; i<kolvo;i++)
cout<<c[z];
сout<<"Изучаю программирование" точка с запятой

Последний раз редактировалось Crudelis; 09.04.2010 в 00:03.
Crudelis вне форума Ответить с цитированием
Старый 09.04.2010, 00:22   #9
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Crudelis Посмотреть сообщение
тогда сделаем поправку
for(int j=0, k=0;j<nb, j++)
{
if(a[i]==b[j])
{
c[k]=a[i];
k++
}

}
Тут ещё внешний цикл есть:
Код:
   int i, j, k;
   for ( i=0; i<na; i++ ) {
      for ( j=0, k=0; j<nb; j++) {
         if ( a[i] == b[j] ) {
            c[k]=a[i];
            k++;
         }
      }
   }

   if ( k == 0)
      cout << "c[] is empty" << endl;
   else {
      for ( i = 0; i < k; i++)
         cout << c[i] << " ";
      cout << endl;
   }
Я правильно понял (и точки с запятой расставил)?
Код:
   int a[] = {1, 2, 3};  
   int b[] = {1, 2};
Мне говорит "c[] - пуст"!
Vago вне форума Ответить с цитированием
Старый 09.04.2010, 00:50   #10
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

void main()
{
int a[3] = {1, 2, 3};
int b[2] = {1, 2};
int c[5];
int i, j, k=0;
for ( i=0; i<3; i++ ) {
for ( j=0; j<2; j++) {
if ( a[i] == b[j] ) {
c[k]=a[i];
k++;
}
}
}

if ( k == 0)
cout << "c[] is empty" << endl;
else {
for ( i = 0; i < k; i++)
cout << c[i] << " ";
cout << endl;
}
}

У меня выводит 1 2
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с одномерным массивом и сортирокой Nitriyc Помощь студентам 0 22.11.2009 14:24
работа с одномерным массивом _Solomon_ Помощь студентам 1 07.06.2007 12:06