Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > сформировать файл который имеет следующую структур


Автор: Narim 30.5.2011, 09:56
день добрый. мне задали составить программу на 2х языках программирования.(на паскале(pas) и на СИ©) на паскале я сделал задачу. но вот на СИ у меня проблема с этим. помогите составить программу на СИ. заранее благодарю!
Сформировать файл “stud”, имеющий следующую структуру: фамилия студента, пол(буква), год рождения. Напечатать список студентов мужского пола с указанием их возраста. В конце списка напечатать средний возраст.
вот код паскаля.

Код
program pr3;
uses crt;
const n=5;
type
swed=record

fio:string;
pl:string;
god:integer;
end;
var
f:file of swed;
d:swed;i,k,t:integer; s:real;
begin
clrscr;
assign(f,'f.txt');
rewrite(f) ;
for i:=1 to n do
begin
with d do
begin
write('famaly: ');readln(fio);
write('pol: '); readln(pl);
write('vozrast: '); readln(god);
end;
write(f,d);
end;close(f);
reset(f);
writeln;
k:=0;t:=0;
while not (eof(f)) do
begin
read(f,d);
if (d.pl='m') then begin writeln(d.fio);writeln(d.god);k:=k+1;t:=t+d.god;end;
end;
s:=t/k;
writeln('s=',s:3:2);
close(f);
end.

 выложил его т.к мне сказали что можно по нему сделать др код. исвиняюсь если что не так.

Автор: bsa 30.5.2011, 11:15
Код
#include <stdio.h>
#include <string.h>
#define N 5

struct swed
{
   char fio[256];
   char pl;
   int god;
};

int main()
{
   int i;
   struct swed d;
   int t, k;
   FILE *f = fopen("f.txt", "wb");
   if (!f) {
       fprintf(stderr, "Failed to open file for writing\n");
       return 1;
   }
   for(i = 0; i < N; ++i) {
      memset(&d, 0, sizeof(d));
      puts("famaly: ");
      scanf("%255c", d.fio);
      puts("pol: ");
      scanf("%c", &d.pl);
      puts("vozrast: ");
      scanf("%d", &d.god);
      fwrite(d, sizeof(d), 1, f);
   }
   fclose(f);
   f = fopen("f.txt", "rb");
   if (!f) {
       fprintf(stderr, "Failed to open file for reading\n");
       return 1;
   }
   t = 0;
   k = 0;
   for(i = 0; i < N; ++i) {
      fread(&d, sizeof(d), 1, f);
      if (d.pl == 'm') {
         printf("%s\n", d.fio);
         t += d.god;
         ++k;
      }
   }
   if (k > 0)
       printf("s=%d\n", t/k);
   fclose(f);
   return 0;
}

Автор: Narim 30.5.2011, 15:06
спасибо!, извините, но у меня не компелирует. указывает ошибку:
Type mismatch in parameter  'ptr' in call to f'

Автор: Dov 31.5.2011, 02:11
Код
#define N 5
struct swed
{
    char    fio[31];
    char    pl;
    int     god;
};

int main()
{
    struct swed    d[N];
    FILE *         f;    
    int            i, t, k;

    if((f = fopen("f.bin", "wb")) != NULL)
    {
        for(i = 0; i < N; i++)
        {
            printf("famaly: ");
            gets(d[i].fio);

            printf("pol   : ");
            d[i].pl = getchar();

            printf("god r.: ");
            scanf("%d", &d[i].god);
            puts("");

            fflush(stdin);
        }
        fwrite(d, sizeof(swed), N, f);
        fclose(f);
    }
    
    if((f = fopen("f.bin", "rb")) != NULL)
    {
        fread(d, sizeof(swed), N, f);

        t = k = 0;
        for(i = 0; i < N; i++)
        {
            if(d[i].pl == 'm')
            {
                printf("%s\t( %d )\n", d[i].fio, 2011 - d[i].god);
                t += 2011 - d[i].god;
                k++;
            }
        }

        if(k > 0)
            printf("\naverage = %g\n", (float)t / k);
        fclose(f);
    }

    return 0;
}

Автор: bsa 31.5.2011, 12:22
Цитата(Narim @ 30.5.2011,  15:06)
спасибо!, извините, но у меня не компелирует. указывает ошибку:
Type mismatch in parameter  'ptr' in call to f'

строка 31 должна выглядеть так:
Код
fwrite(&d, sizeof(d), 1, f);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)