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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2010, 12:17   #1
vad-92
Новичок
Джуниор
 
Регистрация: 14.06.2010
Сообщений: 2
По умолчанию найти разность и пересечение множеств (синтаксис СИ)

народ,плиз,помогите с прогой

заданы 2 множества точек A и В (с разным количеством точек).Найти пересечение и разность этих множеств.Координаты точек-переменные структурного типа (struct) выводятся из файла.
vad-92 вне форума Ответить с цитированием
Старый 14.06.2010, 12:30   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Сделаю за деньги.
Аська в профиле.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 14.06.2010, 12:46   #3
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

И в чем сложность задачи? Главное знание определений пересечения
http://ru.wikipedia.org/wiki/%D0%9F%...81%D1%82%D0%B2
и разность двух множеств,
http://ru.wikipedia.org/wiki/%D0%A0%...81%D1%82%D0%B2
а дальше дело техники =)
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 14.06.2010, 13:07   #4
vad-92
Новичок
Джуниор
 
Регистрация: 14.06.2010
Сообщений: 2
По умолчанию

так в том-то и дело,что техника хромает,я прогу написал,но она считывает с файла не все точки,т.е если множества различаются больше чем на 1 точку,то остальные точки не считываются
x1 y1 x2 y2
1 3 1 3
2 0 0 2
5 5
1 2
точка множества А(1,2) уже не считывается
вот листинг моей проги

#include<stdio.h>
#include<conio.h>
int main(int argc, char* argv[])
{
int i,j; //переменные, используемые в циклах
int chislo_tochekA; // количество точек в множестве А
int chislo_tochekB; // количество точек в множестве В
int a,b; //переменные, используемые в качестве счетчиков
int k; //дополнительная переменная
struct A //структура точек множества А
{
int x1; //координаты X1 точек множества A
int y1; //координаты Y1 точек множества A
};
struct A A1[100]; //в структуре A содержится до 100 значений каждой координаты
struct B //структура точек множества В
{
int x2; //координаты X2 точек множества B
int y2; //координаты Y2 точек множества B
};
struct B B1[100]; //в структуре В содержится до 100 значений каждой координаты

FILE *file; //открываем файл mnozestva.txt для чтения
file = fopen("mnozestva.txt","r"); //если файл не найден,выводится на экран сообщение об ошибке
if(file==NULL)
{
printf("file not found\n");
return 1;
}
a=0;
b=0;
while(!feof(file)) //"Забираем" точки из файла
{
fscanf(file,"%i",&A1[a].x1);
if(A1[a].x1> 1000 || A1[a].x1<-1000)
{
printf ("element isn’t for source interval");
return 1;
}
fscanf(file,"%i",&A1[a].y1);
if(A1[a].y1> 1000 || A1[a].y1<-1000)
{
printf ("element isn’t for source interval");
return 1;
}
a++;
fscanf(file,"%i",&B1[b].x2);
if(B1[b].x2> 1000 || B1[b].x2<-1000)
{
printf ("element isn’t for source interval");
return 1;
}

fscanf(file,"%i",&B1[b].y2);
if(B1[b].y2> 1000|| B1[b].y2<-1000)
{
printf ("element isn’t for source interval");
return 1;
}
b++;
}
chislo_tochekA=a-1; //число точек множества А
chislo_tochekB=b-1; //число точек множества В

for (i=0;i<chislo_tochekA;i++)
{
for (j=0;j<chislo_tochekB;j++)
{
if (A1[i].x1==B1[j].x2 && A1[i].y1==B1[j].y2)
{
/* если координаты точек обоих множеств равны,то выводим их на экран,они и будут являться точками искомого пересечения*/
printf("X(peresechenia)= %i",A1[i].x1);
printf(" Y(peresechenia)= %i",A1[i].y1);
k=i;
}
if (A1[i].x1!=A1[k].x1 && A1[i].y1!=A1[k].y1)
{ /* Выводим на экран координаты точек множества А, не входящих во множество В */
printf(" X(raznosti)= %i",A1[i].x1);
printf(" Y(raznosti)= %i",A1[i].y1);
}
printf("\n");
}
getch();
return 0;
}
vad-92 вне форума Ответить с цитированием
Старый 14.06.2010, 13:50   #5
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

А нельзя немного подредактировать документ откуда берутся точки. Пусть в начале документа идет количество точек в множестве A, затем количество точек в B, а потом только их координаты. Это решит все ваши проблемы да и поможет избавится от
Код:
struct B B1[100];
, благодаря динамическому выделению под них памяти.
Пожалуйста, перед опубликованием кода, корректируйте его через теги =)
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶

Последний раз редактировалось dxdy; 14.06.2010 в 13:53.
dxdy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пролог!!!!!" Пересечение множеств giga1989 Помощь студентам 0 28.04.2010 21:27
пересечение двух множеств Олежек Фриланс 7 10.03.2010 18:46
Найти разность мин и макс значение функции J0n1cK Помощь студентам 1 19.06.2009 20:12
перетин множеств designer Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2009 12:17
Найти разность суммы элементов массива В(20) с чётными номерами... никита989 Помощь студентам 6 16.01.2008 13:51