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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 20:39   #1
aleks240295
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 16
По умолчанию сортировки

подскажите что не так в программе почему то выдает ошибку одну когда начинается сортировка слиянием после int merge(.....) пишет(declaration synax error)и скажите может что самой логикой задачи не правильно будет ли работать так эта сортировка слиянием
вот код
Код:
#include <stdio.h>
#include<conio.h>
#include <dir.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <dos.h>
struct potreb
{
    int nomer;
    char FIO[25];
    char adress[25];
    int start;
    int end;
    int startdat[3];
    int enddat[3];
    int cena;
    int dolgnik;
    int ras;
};
int main()
{
    char s;
    int i,n,a,b,c,e;
    potreb pb;
    char filename[]="c:\\TEMA.txt";
    FILE*f;
    f=fopen(filename,"rb+");
    char filname[]="c:\\oplata.txt";
    FILE*d;
    d=fopen(filname,"rt");
    /*printf("введите цену за первые 100 квт:");
    scanf("%i",&a);
    printf("введите цену за следующие 150 квт:");
    scanf("%i",&b);
    printf("введите цену свыше 150 квт:");
    scanf("%i",&c);
    fprintf(d,"%i",a);
    fprintf(d,"%i",b);
    fprintf(d,"%i",c);
    */
    fscanf(d,"%i",&a);
    fscanf(d,"%i",&b);
    fscanf(d,"%i",&c);
    if(f)
    {
	do
	{
	    fflush(stdin);//o4istka bufera klaviaturi
	    printf("\n файл есть выберите действие:\n");
	    printf("0-создать файл заново\n");
	    printf("1-добавить данные в существующий файл\n");
	    printf("2-отказаться от ввода\n");
	    printf("3-просмотр файла*\n");
	    printf("4-выход\n");
	    printf("5-должники\n");
	    printf("6-сортировка слиянием по общему расходу\n");
	    s=getchar();

	    if (s=='0') f=fopen(filename,"wb+");
	    else if(s=='1') f=fopen(filename,"ab+");
	    else if(s=='2')
	    {
	     printf("\n выберите другое действие:");
	     s=getchar();
	    }
	    else if(s=='3')
	    {
printf("\n  ╔════╦═════════════╦═════════════╦═════╦═════╦═════╦════╦═══════════╦═══════════╗");
printf("\n  ║ No   ║     фио            ║     адрес         ║нач.п  ║кон.п  ║общ.р║цена ║ нач.дат        ║  кон.дат        ║");
printf("\n  ╠════╬═════════════╬═════════════╬═════╬═════╬═════╬════╬═══════════╬═══════════╣ ");
rewind(f);
while(fread(&pb,sizeof(pb),1,f))
{
 pb.ras=pb.end-pb.start;
 if((pb.ras)<=100 && (pb.ras)>0)
   pb.cena=(pb.ras)*a;
    else if((pb.ras)>100 && (pb.ras)<=250)
     pb.cena=(100*a)+(((pb.ras)-100)*b);
      else if((pb.ras)>=250);
       pb.cena=(100*a)+(150*b)+(((pb.ras)-250)*c);
 printf("\n   %4d %11s %11s %5d %5d %5d %4d", pb.nomer,pb.FIO,pb.adress,pb.start,pb.end,pb.ras,pb.cena);

  for(int i=0;i<3;i++)
  if (i==0 || i==1)
    printf("%2d.",pb.startdat[i]);
  else  printf("%4d.",pb.startdat[i]);
 printf("є");
  for(int j=0;j<3;j++)
  if (j==0 || j==1)
    printf("%2d.",pb.enddat[j]);
  else printf("%4d.",pb.enddat[j]);
 printf("║");}
 printf("\n  ╚════╩═════════════╩═════════════╩═════╩═════╩═════╩════╩═══════════╩═══════════╝");
}
   else if(s=='5')
   {
   printf("\n ╔══════════════════════╗");
   printf("\n ║       должники                   ║");
   printf("\n ╠══════════════════════╣");
   rewind(f);
   while(fread(&pb,sizeof(pb),1,f))
   {
    if((pb.enddat[2]-pb.startdat[2])>=1 || (pb.enddat[2]-pb.startdat[2]==0)
    && (pb.enddat[1]-pb.startdat[1])>1 || (pb.enddat[2]-pb.startdat[2])==0 &&
    (pb.enddat[1]-pb.startdat[1])==1 && (pb.enddat[0]>pb.startdat[0])
    || (pb.enddat[2]-pb.startdat[2])==1 && !(pb.enddat[1]==12 && pb.startdat[1]==1))
     printf("\n є%21sє",pb.FIO);  }
     printf("\n ╚════════════════════╝");
   } 

  int Merge (potreb*Array, int Start, int Middle, int End)
   {\\вот тут ошибка declaration synax error
   potreb *RezArray;
   RezArray=((potreb)*malloc(sizeof(potreb)*(End-Start+1));
int iFlag1, iFlag2, iSumFlag, i;
   iSumFlag=0;
   iFlag1=Start;
   iFlag2=Middle+1;
   while((iFlag1<=Middle)&&(iFlag2<=End))
   {
      if(Array[iFlag1].ras>Array[iFlag2].ras)
      {
	 RezArray[iSumFlag]=Array[iFlag1];
	 iSumFlag++;
	 iFlag1++;
      } else
      {
	 RezArray[iSumFlag]=Array[iFlag2];
	 iSumFlag++;
	 iFlag2++;
      }
   }
   for(i=iFlag1; i<Middle+1; i++)
   {
      RezArray[iSumFlag+i-iFlag1]=Array[i];
   }
   for(i=iFlag2; i<End+1; i++)
   {
      RezArray[iSumFlag+i-iFlag2]=Array[i];
   }
   for(i=0; i<End-Start+1; i++)
   {
      Array[Start+i]=RezArray[i];
   }
}
int MergeSort(potreb *Array, int Start, int End)//подпрограмма слияния
{
   if(Start<End)
   {
      MergeSort(Array, Start, (Start+End)/2);
      MergeSort(Array, (Start+End)/2+1, End);
      Merge(Array, Start, (Start+End)/2, End);
   }
}

Последний раз редактировалось aleks240295; 31.05.2013 в 20:48.
aleks240295 вне форума Ответить с цитированием
Старый 31.05.2013, 20:40   #2
aleks240295
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 16
По умолчанию

Код:
 if (s=='6')
 {
void sort_sli()//
{
 float c1,c2,c3;
 FILE *f;
 char name[20];
 int i,n=0,k,fl=0;
 potreb pb;
 potreb *mass;
 printf("введите имя файла*\n");
 fflush(stdin);
 gets(name);
 f=fopen(name,"r");
 fread(&c1,sizeof(float),1,f);
 fread(&c2,sizeof(float),1,f);
 fread(&c3,sizeof(float),1,f);
 while(!feof(f))
 {
  fread(&pb,sizeof(pb),1,f);/
  n++;
 }
 mass=new potreb[n];/
 fseek(f,3*sizeof(int),SEEK_SET);
 for(i=0;i<n;i++)
  fread(&mass[i],sizeof(potreb),1,f);
 MergeSort(mass, 0, n-1);

printf("\n  ╔════╦═════════════╦═════════════╦═════╦═════╦═════╦════╦═══════════╦═══════════╗");
printf("\n  ║ No   ║     фио             ║     адрес          ║нач.п ║кон.п  ║общ.р ║цена ║ нач.дат       ║  кон.дат        ║");
printf("\n  ╠════╬═════════════╬═════════════╬═════╬═════╬═════╬════╬═══════════╬═══════════╣ ");
 for(i=0;i<n-1;i++)
 rewind(f);
while(fread(&pb,sizeof(pb),1,f))
{
 if((pb.end-pb.start)<=100 && (pb.end-pb.start)>0)
   pb.cena=(pb.end-pb.start)*a;
    else if((pb.end-pb.start)>100 && (pb.end-pb.start)<=250)
     pb.cena=(100*a)+(((pb.end-pb.start)-100)*b);
      else if((pb.end-pb.start)>=250);
       pb.cena=(100*a)+(150*b)+(((pb.end-pb.start)-250)*c);
 printf("\n  %4d %11s %11s %5d %5d %5d %4d ",mass[i].nomer,mass[i].FIO,mass[i].adress, mass[i].start, mass[i].end, mass[i].end-mass[i].start, mass[i].cena);

  for(int i=0;i<3;i++)
  if (i==0 || i==1)
    printf("%2d.",pb.startdat[i]);
  else  printf("%4d.",pb.startdat[i]);
 printf("є");
  for(int j=0;j<3;j++)
  if (j==0 || j==1)
    printf("%2d.",pb.enddat[j]);
  else printf("%4d.",pb.enddat[j]);
 printf("є");}
printf("\n  ╚════╩═════════════╩═════════════╩═════╩═════╩═════╩════╩═══════════╩═══════════╝");
 fclose(f);}
}  
   if(s=='4')
return 0;
//  else
//f=fopen(filename,"rb");
}
 while(s!='0' && s!='1' && s!='2' && s!='3' && s!='4'&& s!='5' && s!='6');
 }
  else
 f=fopen(filename,"wb+");
  if(s!='2'&& s!='3' && s!='4' && s!='5')
  {
   do
    {
      fflush(stdin);
      printf("\n номер лицевого счета*:");scanf("%d",&pb.nomer);
      fflush(stdin);
      printf("\n фио:");gets(pb.FIO);
      printf("\n адрес:");gets(pb.adress);
      fflush(stdin);
      printf("\n начальное показание:"); scanf("%d",&pb.start);
      printf("\n конечное показание:"); scanf("%d",&pb.end);
      printf("\n начальная дата*:");
      for(int i=0;i<3;i++)
	scanf("%i",&pb.startdat[i]);
      printf("\n конечная дата*:");
      for(int j=0;j<3;j++)
       scanf("%d",&pb.enddat[j]);
      fwrite(&pb,sizeof(pb),1,f);
      printf("\n продолжить ввод? [д/н]:");
      fflush(stdin);
      s=getchar();

    }
   while(s=='д'|| s=='Д');
   }
   fclose(d);
   fclose(f);
   return 0;
}

Последний раз редактировалось aleks240295; 31.05.2013 в 20:44.
aleks240295 вне форума Ответить с цитированием
Старый 31.05.2013, 20:46   #3
aleks240295
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 16
По умолчанию

табличка поехала извиняйте ни как не ставится ровно ну суть не в этом
aleks240295 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) mmd12 Помощь студентам 4 17.05.2012 14:14
сортировки Денис16 Паскаль, Turbo Pascal, PascalABC.NET 3 22.02.2012 20:46
сортировки Christi93 Общие вопросы C/C++ 2 19.12.2010 12:15