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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2012, 15:28   #1
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию Структура в типизированном файле (Паскаль)

Огромная просьба, может кто накидать код на Паскале? ХОТЯ БЫ просто основные моменты. Хоть что-то...

Сама задача следующая:
Описать структуру, содержащую поля: 1.Фамилия, имя. 2.Знак зодиака. 3.Дата рождения (массив из трёх чисел). Написать программу, выполняющую следующие действия: 1.Ввод с клавиатуры данных в массив, состоящий из 8 элементов типа ZNAK; записи должны быть упорядочены по датам рождения; 2. Вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Всю эту структуру нужно вставить в файл и работать с ней.
P.S. Ещё добавил возможность изменения выбранной структуры по фамилии, но что-то и она нормально работать не хочет...


Сделал на Си, но есть ошибки, которые я пока решить не могу. Так или иначе, программа запускается и как ни как работает... Её нужно перевести на Паскаль, с чем я борюсь уже который час, но безрезультатно...

Последний раз редактировалось Jetbalance; 30.06.2012 в 15:59.
Jetbalance вне форума Ответить с цитированием
Старый 30.06.2012, 15:29   #2
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
int p; int kolichestvo=0;
using namespace std;
struct ZNAK {char NAME[20],ZNAK2[15]; unsigned BDAY[3];}BZNAK[8],T;
 
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла (и сортировка по дате рождения)
void app(FILE *); // добавление в файл
void find(FILE *); // поиск по фамилии и, если необходимо, изменение выбранной структуры
 
 
main()
{
setlocale(LC_CTYPE,"Russian");
char c;
FILE *tf;
printf ("Выберете нужный вам режим:\n");
while (1)
{
 puts(" 1 – Новый файл");
 puts(" 2 – Просмотр файла");
 puts(" 3 – Добавление в файл");
 puts(" 4 – Поиск по фамилии и изменение");
 puts(" 0 - Выход");
 c=getch();
 switch(c)
 { case '1':input(tf);break;
  case '2':print(tf);break;
  case '3':app(tf);break;
  case '4':find(tf);break;
  case '0':return 0;
  default : puts(" Неверный режим");
 }
}
}
 
 
void input(FILE *tf)
{
     char ch, Number[15]; int k=0,i=0,j;
     tf=fopen("file1.dat","wb"); 
  printf("\n Ввод информации о людях:\n");
 do
 { 
  printf("\n Фамилия, имя человека: ");    gets(BZNAK[i].NAME);
  printf(" Знак зодиака: ");               gets(BZNAK[i].ZNAK2);
  
  printf("Знак зодиака: (YYYY MM DD)? ");
                                           for(j=0;j<3;j++)
                                           
                                           scanf("%u",&BZNAK[i].BDAY[j]);
                                           gets(Number); 
                                           k++;
                                                                                 
  fwrite(&BZNAK[i],sizeof(BZNAK[i]),i,tf);    
  i++;          
          
kolichestvo=i;
  printf("\n Закончить? y/n \n");
 
  printf("\n");
  printf("\n");
  
  ch=getch();
 }
while (ch != 'y');
 fclose(tf);
}
 
 
void print(FILE *tf)
{ int i,j,tg;
 tf=fopen("file1.dat","rb"); 
 i=1;
 for (i=0;i<kolichestvo;i++)
 fread(&BZNAK[i],sizeof(BZNAK[i]),i,tf);
 
 printf ("Записи, упорядоченные по дате рождения:\n");
 
for(i=0;i<kolichestvo;i++)
   for(j=0;j<kolichestvo-i-1;j++)
   
if((long)1000*BZNAK[j].BDAY[0]+50*BZNAK[j].BDAY[1]+BZNAK[j].BDAY[2]>(long)1000*BZNAK[j+1].BDAY[0]+50*BZNAK[j+1].BDAY[1]+BZNAK[j+1].BDAY[2])
 {
  T=BZNAK[j];
  BZNAK[j]=BZNAK[j+1];
  BZNAK[j+1]=T;
 }
  for(i=0;i<kolichestvo;i++)
  {fread(&BZNAK[i],sizeof(BZNAK[i]),1,tf);
       printf("\nИмя: %s \nZЗнак зодиака: %s \nДата рождения: %u %u %u\n\n", BZNAK[i].NAME,  BZNAK[i].ZNAK2,   BZNAK[i].BDAY[0],   BZNAK[i].BDAY[1],   BZNAK[i].BDAY[2]);
  
 
 
 }
getch();
 
}
 
 
void app(FILE *tf)
{
 char ch, Number[15]; int i=kolichestvo,j,k;
 tf=fopen("file1.dat","ab"); 
  printf("\n Ввод информации о людях:\n");
 do
 { 
  printf("\n Фамилия, имя человека: ");    gets(BZNAK[i].NAME);
  printf(" Знак зодиака: ");               gets(BZNAK[i].ZNAK2);
  
  printf("Дата рождения: (YYYY MM DD)? ");
                                           for(j=0;j<3;j++)
                                           
                                           scanf("%u",&BZNAK[i].BDAY[j]);
                                           gets(Number); 
                                           k++;
                                           
  fwrite(&BZNAK[i],sizeof(BZNAK[i]),1,tf);     
  i++;    
  kolichestvo=i;      
  printf("\n Закончить? y/n \n");
 
  printf("\n");
  printf("\n");
  ch=getch();
 }
 
 
while (ch != 'y');
 
 fclose(tf);
}
Jetbalance вне форума Ответить с цитированием
Старый 30.06.2012, 15:30   #3
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию

Продолжение:
Код:
void find(FILE *tf)
{char c='n', tovR[10],Number[15];
 long int i=0,j,k=0,tz,yt;
 int z;
 tf=fopen("file1.dat","rb+"); 
 puts("Введите искомую фамилию: \n");
 gets(tovR);
 for (i=0;i<kolichestvo;i++)
 fread(&BZNAK[i],sizeof(BZNAK[i]),1,tf);
  
// while (!feof(tf))
 //{
    z=strlen(tovR);
    j=0;
     
    for(i=0;i<kolichestvo;i++)
 if(!strncmp(tovR, BZNAK[i].NAME, z)) 
   
    {
        printf("\nИмя: %s \nЗнак зодиака: %s \nДата рождения: %u %u %u\n\n", BZNAK[i].NAME,  BZNAK[i].ZNAK2,   BZNAK[i].BDAY[0],   BZNAK[i].BDAY[1],   BZNAK[i].BDAY[2]);           
        j=1;
        yt=i;
    };
  if(j==0) printf("Нет такой личности!\n\n"); 
  printf ("\n");
           
  else
   {                  
   printf("\n Изменить выбранную структуру? y/n ");
   c=getch();
   }
   if (c=='y')
     {
       printf("\n Фамилия, имя человека: ");    gets(BZNAK[yt].NAME);       
       printf(" Знак зодиака: ");               gets(BZNAK[yt].ZNAK2);
       printf("Дата рождения: (YYYY MM DD)? ");
                                           for(j=0;j<3;j++)
                                        
                                           scanf("%u",&BZNAK[yt].BDAY[j]);
                                           gets(Number); 
                                          // k++;
                                              
 
    tz=sizeof(BZNAK[yt]);
       fseek(tf, -tz, 1); 
      fwrite(&BZNAK[yt],sizeof(BZNAK[yt]),1,tf);
     }
 //  }           
fread(&BZNAK[yt],sizeof(BZNAK[yt]),1,tf);
 
 
fclose(tf);
}
Jetbalance вне форума Ответить с цитированием
Старый 01.07.2012, 10:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

описание структуры (запись == record в терминах Паскаля) может выглядеть так:
Код:
type ZNAK = record
   Fam_Name : string[40];
   Znak_Zodiak : string[15];
   DateR : array[1..3] of integer; {дата рождения в формате [1] день, [2] месяц [3] год }
end;

var 
   Spisok : array[1..8] of Znak;
   FileZnak : file of Znak;
...

p.s. не понимаю, зачем писать программу на С, если нужна на Паскале?! Если мне нужно покрасить стену в зелёный цвет, я её сначала покрашу в синий, а потому перекрашу, так что ли?!...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.07.2012, 12:16   #5
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию

Вот и мне интересно, зачем писать на Паскале, если вскоре оставим его и больше даже вспоминать не будем... Задание такое, написать на 2-х языках, это не моё желание...

Я подредактировал, может кто-нибудь помочь, Пожалуйста!: не пойму, что писать (или как оформить) на местах, которые я отметил { ? ? } ?
И вообще, можно ли так оформлять? Спасибо...

Код:
type
   ZNAK = record
    NAME: array [0..19] of char;
    ZNAK2: array [0..14] of integer;
    BDAY: array [0..2] of byte;
  end;
 
var
 p, kolichestvo: integer;
 BZNAK: array [0..7] of ZNAK;
 T: ZNAK;
 
procedure input({ ? ? });  
procedure print({ ? ? });
procedure app({ ? ? });
procedure find({ ? ? });
 
var
   c: char;
 
begin
     writeln ('Выберете нужный вам режим:');
     while true do
     begin
          writeln (' 1 – Новый файл');
          writeln (' 2 – Просмотр файла');
          writeln (' 3 – Добавление в файл');
          writeln (' 4 – Поиск по фамилии и изменение');
          writeln (' 0 – Выход');
          readln(c);
          case c of
               '1': input({ ? ? }); break;
               '2': print({ ? ? }); break;
               '3': input({ ? ? }); break;
               '4': input({ ? ? }); break;
               '0': input({ ? ? }); { ? ? вернуть нулевое значение} {может, exit ?...}
          else
          writeln (' Неверный режим! ');
          end;
     end;
end;
 
procedure input({ ? ? });
 Var ch: char; Number: array [0..15] of char; k,i,j: integer;
begin
    Assign(tf, ‘file1.txt’); 
    Rewrite(tf);  
     k:=1; i:=1;
    
writeln ('Ввод информации о людях:');
do
 begin
  writeln ('Фамилия, имя человека: ');    readln(BZNAK[i].NAME);
  writeln (' Знак зодиака: ');              readln(BZNAK[i].ZNAK2);
 
  writeln ('Дата рождения: (YYYY MM DD)? ');
                                           for(j=1;j<4;j++)
 
                                           readln (&BZNAK[i].BDAY[j]);
                                           k:=k+1;
 
  i:=i+1;
 
kolichestvo:=i;
  writeln (' Закончить? y/n \n');
 
  writeln ();
  writeln ();
 
  readln(ch);
 end;
while (ch <> 'y');
 
 
for i:= 1 to kolichestvo do
 writeln(tf,BZNAK[i]); 
 close(tf);
end;
 
 
procedure print({ ? ? });
 Var i,j,tg: integer;
begin
Assign(tf, ‘file1.txt’); 
Reset(tf);
 
for i:= 1 to kolichestvo do
Read(tf, &BZNAK[i]); 
 
   writeln ('Записи, упорядоченные по дате рождения:');
 
   for i:= 1 to kolichestvo do
   for j:=1 to (kolichestvo-i-1) do
 
if((long)1000*BZNAK[j].BDAY[1]+50*BZNAK[j].BDAY[2]+BZNAK[j].BDAY[3]>(long)1000*BZNAK[j+1].BDAY[1]+50*BZNAK[j+1].BDAY[2]+BZNAK[j+1].BDAY[3])
 begin
  T=BZNAK[j];
  BZNAK[j]=BZNAK[j+1];
  BZNAK[j+1]=T;
 end;
 
  for i:=1 to kolichestvo do
  begin
       writeln(tf,BZNAK[i]); 
       writeln ('Имя: ',BZNAK[i].NAME);
       writeln ('Знак зодиака: ',BZNAK[i].ZNAK2);
       writeln ('Дата рождения: ',BZNAK[i].BDAY[1],BZNAK[i].BDAY[2], BZNAK[i].BDAY[3],);
  end;
 
close(tf);
writeln ();
end;

Последний раз редактировалось Jetbalance; 01.07.2012 в 12:40.
Jetbalance вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в типизированном файле в Delphi Neroaz Помощь студентам 2 08.04.2010 00:44
Сортировка записей в типизированном файле Faina Помощь студентам 2 26.03.2010 17:28
сохранение инфо в типизированном файле prostac Помощь студентам 2 23.11.2009 14:55
отсортировать информацию обменом в типизированном файле rainbow Помощь студентам 6 07.03.2009 09:26
Расчет числа строк в типизированном файле 1234 Паскаль, Turbo Pascal, PascalABC.NET 6 20.05.2008 11:14