"представление множеств в памяти ЭВМ"

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
Olga "муrr"
Сообщения: 4
Зарегистрирован: 24 янв 2009, 15:47

Здравствуйте.
есть такая задачка:
написать программу, которая по заданным множествам А, B, С, D десятичных цифр вычисляет множество(E), содержащее все цифры множества А, за исключением цифр из B и из С, а так же все цифры множества D. Измерить время решения задачи..
всё работает кроме самого главного: множество Е не вычисляется((..
помогите плиз найти ошибку...

вот текст программы:

Код: Выделить всё

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <time.h>

//********************** struct type  ******************

typedef struct l
	{
	  int z;
	  struct l *next;
	}BASE;

//**********************  vvod  ************************

BASE* vvod()
  {
    BASE *work=NULL,*h=NULL;

    int i,s;
        scanf("%d",&s);
	  work=(BASE*)malloc(sizeof(BASE));
	  work->next=h;
	  h=work;
	  work->z=s;

    return work;
  }

//*********************  vivod  ************************

void vivod (BASE *work)
  {
    printf("\n");
    do
      {
	printf("%d",work->z);
	work=work->next;
      }
    while(work!=NULL);
  }

//***********************  free  ***********************

BASE* osvob (BASE *sp)
  {
    BASE *g;
      do
	{
	  g=sp;
	  sp=sp->next;
	  free(g);
	}
      while(sp!=NULL);
      return sp;
  }

//***********************  main  ***********************

void main(void)
  {
    BASE *a,*b,*c,*d,*a1,*c1,*b1,*d1,*e=NULL,*h=NULL;
    int fl1,fl2;
    long kh;
    clock_t start, end;
      clrscr();
      puts("vvedite mnogestvo A:\n");
      a1=a=vvod();
      puts("\nvvedite mnogestvo B:\n");
      b1=b=vvod();
      puts("\nvvedite mnyuogestvo C:\n");
      c1=c=vvod();
      puts("\nvvedite mnogestvo D:\n");
      d1=d=vvod();
      start=clock();
      for(kh=0;kh<1000 ;kh++)
	{
	  if(e!=NULL)
	    {
	      e=osvob(e);
	      h=NULL;
	    }
	  d=d1;
	  do
	    {

	      fl2=1;
	      if(fl1)
		{
		  do
		    {
		      if(a->z==b->z)
			fl2=0;
		      a=a->next;
		    }
		  while(fl2&&a!=NULL);

		  if(fl2)
		    {
		      do
			{
			  if(a->z==c->z)
			    fl2=0;
			  b=b->next;
			}
		      while(fl2&&b!=NULL);
		    }
		}
	      a=a1;
	      b=b1;
	      c=c1;
	      if(fl2==0)
		{
		  e=(BASE*)malloc(sizeof(BASE));
		  e->next=h;
		  h=e;
		  e->z=a->z;
		}
	      d=d->next;
	    }
	  while(d!=NULL);
	}
      end=clock();
      puts("\npoluchivsheesa mnogestvo:\n");
      if(e!=NULL)
	vivod(e);
      else
	puts("net podhodashih elementov");
      printf("\n\nThe time was: %f\n", (end - start) / CLK_TCK);
      getch();
  }
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

Ну когда же вы научитесь пользоваться отладчиками? :)
А так скачу, забавная функция ввода множества. При такой реализации в множествах будет по одной цифре только.

Код: Выделить всё

//********************** vvod ************************

BASE* vvod()
{
BASE *work=NULL,*h=NULL;

int i,s;
scanf("%d",&s);
work=(BASE*)malloc(sizeof(BASE));
work->next=h;
h=work;
work->z=s;

return work;
}
Ну а дальше смотреть не буду, оформляйте вопрос как положено. Исходник читать невозможно...
Ответить