Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ прога на TC

Автор: Equal 29.10.2012, 19:56

Задача такая:
Дан файл, содержащий сведения о сотрудниках отдела учреждения.
Структура записи файла: фамилия, имя, отчество сотрудника, год рождения, должность, домашний телефон, домашний адрес. Записи в файле не упорядочены.
Написать программу которая:
- упорядочивает записи в алфавитном порядке, используя список, и записывает их в новый файл;
- печатает список сотрудников (в алфавитном порядке), у которых есть домашний телефон, выводить только ф.и.о. и номер телефона.

Программу написать на turbo c++

Подскажите пожалуйста как создать массив структур или же более простой способ для сортировки файла? заранее спасибо

Автор: граф Монте-Кристо 29.10.2012, 20:20

И когда же у нас нормально начнут информатике/программированию учить?..
Сформулируйте вопрос конкретнее. Вы не знаете, как создать вообще массив, или именно массив структур?

UPD: Перечитал пост и понял, что выглядит двусмысленно. Это камень не в Ваш огород, Equal, а в огород института/факультета/преподавателей.

Автор: Equal 29.10.2012, 21:03

Как создать массив структур я знаю, непонятно как его в функции использовать.

Пока что написал так:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#define DL_FIO 20
#define DL_GR 5
#define DL_DOLGNOST 20
#define DL_DOMADR 12
#define DL_DOMTEL 8
#define NMAX 100

struct SVEDENIYA

{ char fio[DL_FIO];
char gr[DL_GR];
char dolgnost[DL_DOLGNOST];
char domadr[DL_DOMADR];
char domtel[DL_DOMTEL];
};

struct EL_MAS
{ char fio[DL_FIO];
char dolgnost[DL_DOLGNOST];
char domadr[DL_DOMADR];
char domtel[DL_DOMTEL];
};

void Uporyad(FILE *f);
void Zapis(FILE *fin);
void Pechat(FILE *f);

int main()
{
FILE *f ;
string ms[NMAX];
int n;
clrscr();
f=fopen(“spisok.txt”, ”r”);
if(f==NULL)
{
printf(“Fail spisok.txt ne naiden”);
getch();
return 1;
}
do
printf(“\n===========================================”);
printf(“\nViberite nomer punkta menu:”);
printf(“\n1-uporyadochivanie spiska sotrudnikov po alfavitu”);
printf(“\n2-pechat spiska sotrudnikov, u kotorih est’ domashniy telefon”);
printf(“\n3-vyhod”);
printf(“\n----------------------------------------------------------------------\n”);
n=getche();
switch(n)
{
case ‘1’: Uporyad(f); break;
case ‘2’: Pechat(f); break;
case ‘3’: break;
default: printf(“\n nuzhno vvodit’ cifru ot 1 do 3”);
}
if(n!=’3’)
{ printf(“\n Dlya prodolzheniya nazhmite lubuyu klavishu”);
getch();
}
}
while(n!=’3’);
fclose(f);
return 0;
}

void Uporyad(FILE *f)
{ int k,i;
struct SVEDENIYA s;
for(k=n-1; k>0; k--)
for(i=0; i<k; i++)
if(strcmp(ms[i].fio,ms[i+1].fio)>0)
{
s=ms[i];
ms[i]=ms[i+1];
ms[i+1]=s;
}


Не уверен только, можно ли в функции Uporyad ссылаться на массив таким образом

Автор: граф Монте-Кристо 30.10.2012, 19:11

Нет, конечно нельзя. Массив лучше передавать по указателю.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)