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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2010, 00:04   #1
AfeR
Новичок
Джуниор
 
Регистрация: 12.07.2010
Сообщений: 1
По умолчанию Pascal файл прямого доступа

Здравствуйте. Я изучал С , а теперь нужно то же самое написать на pascal.
Не поможете?
Заранее спасибо.
Вот код на С:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <mem.h>
#include <string.h>

#define LINE struct tline
#define MAX_LINES 50
#define FILENAME "!table.dat"

FILE *myfile,*myfile1;

LINE {int nfil,cap; char name[15];};

int lcol,i;

int lnum(FILE *fl)
{
  fseek(fl,0L,SEEK_END);
  return ftell(fl)/sizeof(LINE);
}

int fwiev(char *myfl)
{
  LINE tcln;
  int num;
  if((myfile=fopen(myfl,"r"))!=NULL)
  {
    num=lnum(myfile);
    fseek(myfile,0L,SEEK_SET);
    for(i=0;i<num;i++)
    {
      fread(&tcln,sizeof(LINE),1,myfile);
      printf("%s \t | %d \t |  %d \t |\n",tcln.name,tcln.nfil,tcln.cap);
    }
    fclose(myfile);
    return 0;
  } else return 1;

}

int ltable()
{
  printf("\n");
  printf("----------------------------------\n");
  printf("Bank\t\t |Filials|Capital|\n");
  printf("----------------------------------\n");

  if(fwiev(FILENAME)!=0) {printf("\nSTOP! File is corrupted\n");return 1;}
}

void p1()
{
  LINE tcln;
  int imax,max;

  myfile=fopen(FILENAME,"r");

  lcol=lnum(myfile);

  fseek(myfile,0L,SEEK_SET);

  fread(&tcln,sizeof(LINE),1,myfile);
  max=tcln.nfil;
  imax=0;

  for(i=1;i<lcol;i++)
  {
    fread(&tcln,sizeof(LINE),1,myfile);
    if(tcln.nfil>max) {max=tcln.nfil; imax=i;}
  }

  fseek(myfile,imax*sizeof(LINE),SEEK_SET);
  fread(&tcln,sizeof(LINE),1,myfile);

  fclose(myfile);

  printf("\nPART 1:\n");
  printf("%s \t | %d \t |  %d \t |\n",tcln.name,tcln.nfil,tcln.cap);
}

void p2()
{
  LINE tcln;

  printf("\nPART 2:\n");

  myfile=fopen(FILENAME,"r");

  fseek(myfile,0L,SEEK_SET);
  for(i=0;i<lcol;i++)
  {
    fread(&tcln,sizeof(LINE),1,myfile);
    if(tcln.cap>50) {printf("%s \t | %d \t |  %d \t |\n",tcln.name,tcln.nfil,tcln.cap);}
  }

  fclose(myfile);
}

void p3()
{
  LINE tcln;
  LINE ttcln;
  int j,lcol1;

  printf("\nPART 3:\n");
  printf("\nNot sorted statement:\n");

  myfile=fopen(FILENAME,"r");
  myfile1=fopen("!out.dat","w");

  fseek(myfile,0L,SEEK_SET);
  fseek(myfile1,0L,SEEK_SET);
  for(i=0;i<lcol;i++)
  {
    fread(&tcln,sizeof(LINE),1,myfile);
    if(tcln.cap<90) fwrite(&tcln,sizeof(LINE),1,myfile1);
  }
  fclose(myfile);
  fclose(myfile1);

  fwiev("!out.dat");

  myfile1=fopen("!out.dat","r+");

  lcol1=lnum(myfile1);

  fseek(myfile1,0L,SEEK_SET);

  for(i = lcol1-1 ; i > 0 ; i--)
   {
    for(j = 0 ; j < i ; j++)
     {
       fseek(myfile1,j*sizeof(LINE),SEEK_SET);
       fread(&tcln,sizeof(LINE),1,myfile1);

       fseek(myfile1,(j+1)*sizeof(LINE),SEEK_SET);
       fread(&ttcln,sizeof(LINE),1,myfile1);

       fseek(myfile1,j*sizeof(LINE),SEEK_SET);
       if(strcmp(tcln.name,ttcln.name)<0)
       {fwrite(&ttcln,sizeof(LINE),1,myfile1);fwrite(&tcln,sizeof(LINE),1,myfile1);}
     }
   }
   fclose(myfile1);

   printf("\nSorted statement:\n");
   fwiev("!out.dat");
}

main()
{
if(!ltable()) {p1();p2();p3();}
}

Последний раз редактировалось Stilet; 13.07.2010 в 08:35.
AfeR вне форума Ответить с цитированием
Старый 12.07.2010, 18:20   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

С таким во фриланс надо...
Вы лучше скажите, с чем у вас здесь проблемы
_-Re@l-_ вне форума Ответить с цитированием
Старый 13.07.2010, 02:25   #3
L_Killer
Пользователь
 
Регистрация: 21.02.2010
Сообщений: 19
По умолчанию

AfeR, слушай, ты бы лучше объяснил конкретную задачу и, может быть, мы бы ее решили. Я бы попробовал
А С я вообще не знаю.
L_Killer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы прямого доступа WOWka777 Общие вопросы .NET 0 15.03.2010 18:11
Типизированные файлы прямого доступа. Nice Plant Помощь студентам 8 06.03.2010 04:22
работа с файломи прямого доступа st1mUA Помощь студентам 0 20.10.2009 01:23
типизированные файлы прямого доступа Arashi Паскаль, Turbo Pascal, PascalABC.NET 0 22.04.2009 16:44