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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2008, 07:21   #1
Zid@ne
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 49
По умолчанию Массивы структур.СИ под ДОС.

Всем доброго времени суток!
Ребята помогите с решение задачи:

Задав массив структур, реализовать его обработку, как указано в варианте. В
программе должны быть предусмотрены процедуры: чтения из файла данных и размещения в массиве
структур; обработки массива структур и вывода, исходя из условия варианта.
Отобрать работников с одинаковыми именами.


не пойму как организовать запись и чтение из файла, сравнение работников по именам...

это программа в TurboPascalе, я обычно на нём пишу, а здесь такая ситуация, что на Си под ДОС написать надо. Слышал что на Си такие программы очень сложно писать...
Код:
program imena;
uses crt;
type
    worker=record
           fam,nam:string;
           nom:integer;
           end;
    workers=array[1..30] of worker;
var
 sp:workers;
 n,i,j: integer;
begin
clrscr;
write('n=');
readln(n);
for i:=1 to n do
  begin
   write('nomer: ');
   readln(sp[i].nom);
   write('family: ');
   readln(sp[i].fam);
   write('name: ');
   readln(sp[i].nam);
  end;
for i:=1 to n do
for J:=1 to n do
if (sp[i].nam=sp[j].nam) and (i<>j)then
 begin
  writeln(sp[i].nom,'',sp[i].fam,'',sp[i].nam);
 end;
readln;
end.
Zid@ne вне форума Ответить с цитированием
Старый 12.12.2008, 08:52   #2
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

Код:
struct worker
  {
         char *fam, *nam;
         int  nom;
  };
     worker sp[30];
     int n,i,j;
  printf("n=");
  scanf("%d", &n);
  for(i=1; i<=n; i++)
  {
   printf("nomer: ");
   scanf("%d", sp[i].nom);
   printf("family: ");
   gets(sp[i].fam);
   printf("name: ");
   gets(sp[i].nam);
  }
for(i=1; i<=n; i++)
 for(j=1; i<=n; j++)
  if ( ( !strcmp(sp[i].nam, sp[j].nam) ) && (i!=j) )
 {
  printf("%d %s %s", sp[i].nom,sp[i].fam,sp[i].nam);
 }
 return 0;
Учиться, учиться и еще раз учиться

Последний раз редактировалось Ламер_001; 12.12.2008 в 08:54.
Ламер_001 вне форума Ответить с цитированием
Старый 12.12.2008, 18:16   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Ничего сложного. Вот тебе функции для записи в файл и для чтения. Я тоже писал лабу когда то =))

Код:
void save_data(struct base *pers, int i)
     {
      FILE *fp;
      char buff[50];
      int x;

      system("CLS");
      puts("Database saving in a file");
      puts("=========================");
      printf("Enter a file name: ");

      fflush(stdin);
      scanf("%s", buff);

      fp=fopen(buff, "w+b");
      if(fp==NULL)
        {
         printf("\nFile open error!\n");
         system("PAUSE");
         return;
        }

      fwrite(&i, sizeof(&i), 1, fp);

      for(x=0;x<i;x++)
        fwrite(&pers[x], sizeof(struct base), 1, fp);

      fclose(fp);

      puts("\nThe database is saved");
      system("PAUSE");
     }

Код:
void load_data(struct base *pers, int *i)
     {
      FILE *fp;
      char buff[50];
      int x;

      system("CLS");
      puts("Loading of database from a file");
      puts("===============================");
      printf("Enter a file name: ");

      fflush(stdin);
      scanf("%s", buff);

      fp=fopen(buff, "rb");
      if(fp==NULL)
        {
         printf("\nFile open error!\n");
         system("PAUSE");
         return;
        }

      fread(i, sizeof(i), 1, fp);

      for(x=0;x<(*i);x++)
        fread(&pers[x], sizeof(struct base), 1, fp);

      fclose(fp);

      puts("\nThe database is loaded");
      system("PAUSE");
     }
В функции нужно передать указатель на массив структур и количество элементов в базе. Моя была такая:

Код:
struct base
  {
   int num;
   char name[15];
   char fam[15];
   int year;
   char tel[12];
  }array[MAX];
Но, в принципе, тут может быть любая, т.к. за 1 раз сохраняется 1 элемент массива, т.е. целая структура, поэтому она может быть любая.
Ну вот, разбирайся =))

З.Ы. Это пример для программы со статистическим распределением памяти. С динамическим будет несколько сложнее, но думаю тебе так вполне сойдет =))
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите переделать 2 задачи под динамические массивы (Паскаль) mpegable Помощь студентам 2 27.05.2008 17:32
Как сделать синхронизацию с Дос - программой semantics Общие вопросы Delphi 1 21.04.2008 21:16
ДОС в паскале nikleb Паскаль, Turbo Pascal, PascalABC.NET 2 07.03.2008 22:50
Помогите пожалуйста с укр.языком в Дос Dimasc Операционные системы общие вопросы 6 11.12.2007 17:50