Работа с текстовым файлом

Тема в разделе "C/C++/C#", создана пользователем IaElka, 5 янв 2010.

  1. IaElka

    IaElka Гость

    Написать программу обработки файла типа запись, содержащую следую-щие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».
    Каждая запись должна содержать следующую информацию о студентах:
    – фамилия и инициалы;
    – год рождения;
    – номер группы;
    – оценки за семестр: по физике, математике, информатике, химии;
    – средний балл.
    Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.
    Содержимое всего файла и результаты решения индивидувльного задания записать в текстовый файл.

    ИНДИВИД. ЗАДАНИЕ:Вычислить общий средний балл всех студентов и распечатать список студентов интересующей вас группы, имеющих средний балл выше общего среднего бал-ла.

    Подскажите, как исправить ошибку при нахождении среднего балла?...считается только целая часть. А как сделать, чтобы и дробная была.?

    #include<conio.h>
    #include<stdio.h>
    #include<io.h>

    struct TZap{
    char FIO[30];
    int DataRojd;
    int NomGr;
    int Fizika;
    int Math;
    int Inform;
    int Himia;
    double s_b;
    }Zap;
    int size = sizeof(TZap);
    FILE *Fz, *Ft;
    char File_Zap[]="zapisi.dat";
    char File_Rez[]="rezult.txt";
    void Out(TZap);

    void main()
    {
    clrscr();
    int kod, D_f,i=0,j,kol;
    long len;
    TZap st, *mas_Z;
    Ft = fopen(File_Rez, "w");
    while(1){
    puts("\nSOZDANIE-1\n-REDAKTIROVANIE-2\nPROSMOTR-3");
    puts("-RESHENIE INDIVIDUALNOGO ZADANIA-4\nVIHOD-0");
    scanf("%d",&kod);
    switch(kod){
    case 1:
    if((Fz=fopen(File_Zap, "wb"))==NULL){
    puts("\nCREATE ERROR!");
    return;
    }
    fclose(Fz);
    printf("\nCreate New File %s!\n",File_Zap);
    break;
    case 2:
    Fz=fopen(File_Zap,"ab");
    printf("\nF.I.O. - ");
    fflush(stdin);
    gets(Zap.FIO);
    printf("\nData rojdenia - ");
    scanf("%d",&Zap.DataRojd);
    printf("\nNomer gruppi - ");
    scanf("%d",&Zap.NomGr);
    printf("\nOcenka po fizike - ");
    scanf("%d",&Zap.Fizika);
    printf("\nOcenka po matematike - ");
    scanf("%d",&Zap.Math);
    printf("\nOcenka po informatike - ");
    scanf("%d",&Zap.Inform);
    printf("\nOcenka po himii - ");
    scanf("%d",&Zap.Himia);
    Zap.s_b=(Zap.Fizika+Zap.Math+Zap.Inform+Zap.Himia)/4;
    fwrite(&Zap,size,1,Fz);
    fclose(Fz);
    break;
    case 3:
    if((Fz=fopen(File_Zap,"rb"))==NULL){
    puts("\nOPEN ERROR!");
    return;
    }
    printf("\n\t------INFORMATIONS------");
    fprintf(Ft,"\n\t------INFORMATIONS------");
    while(1){
    if(!fread(&Zap,size,1,Fz))break;
    Out(Zap);
    }
    fclose(Fz);
    break;
    /*case 4:
    Fz=fopen(File_Zap,"rb");
    D_f=fileno(Fz);
    len=filelength(D_f);
    kol=len/size;
    mas_Z=new TZap[kol];
    for(i=0;i<kol;i++)
    fread((mas_Z+i),size,1,Fz);
    fclose(Fz);
    printf("\n\t------SORT------");
    fprintf(Ft,"\n\t------SORT------");
    for(i=0;i<kol-1;i++)
    for(j=i+1;j<kol;j++)
    if(mas_Z.s_b>mas_Z[j].s_:rolleyes:{
    st=mas_Z;
    mas_Z=mas_Z[j];
    mas_Z[j]=st;
    }
    for(i=0;i<kol;i++)
    Out(mas_Z);
    delete []mas_Z;
    break;*/
    case 0:
    fclose(Ft);
    return;
    }
    }
    }
    void Out(TZap z)
    {
    printf("\n%20s,%d,%6d,%d,%d,%d,%d,%5.2lf.",z.FIO,z.DataRojd,z.NomGr,z.Fizika,z.Math,z.Inform,z.Himia,z.s_:ya_lamo:;
    fprintf(Ft,"\n%20s,%d,%d,%d,%d,%d,%d,%5.2lf.",z.FIO,z.DataRojd,z.NomGr,z.Fizika,z.Math,z.Inform,z.Himia,z.s_B);
    }
     
  2. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    1. c=pow((y/x),(1/3)); Может так получится...
     
  3. IaElka

    IaElka Гость

    Почему 1 ?
     
  4. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Из покрывшихся пылью школных знаний мне вспоминается, что квадратный корень в виде дроби записывается как 1/2. А кубический корень как 1/3.
     
  5. IaElka

    IaElka Гость

    всёравно не выходит. Думаецца, что предложенные варианты ответа неверны.
     
  6. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Общий алгоритм решения таких задач это:
    1. Определить входные данные чтобы можно было легко считать;
    2. Посчитать все эти a,b,c,d,f... вручную;
    3. Вывести расчитываемые значения (эти самые a,b,c,d,f... ) на экран и сравнить какие из них отличаются от посчитанных вручную;
    4. Повторять пока не будут выявлены и исправлены все ошибки.

    Если есть сомнения в ответе есть только один способ проверить - посчитать самому :(

    Добавлено: Вижу ты поправил. Я заметил z сначала задаётся как входной параметр, а потом считается как y-x.
     
  7. IaElka

    IaElka Гость

    Да поправил.)
     
  8. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    c=pow((y/x),(1.0/3))

    Во, так правильно. Иначе действовали правила целочисленной арифметики и деление 1 на 3 давало 0.
     
  9. IaElka

    IaElka Гость

    как же тогда заменить функцию pow?

    Добавлено: Получилось!!!! Спасибо!!! :(
     
  10. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Задача №4

    Лишний цикл while. z не уменьшается и происходит зацикливание если последнее введеное значение было не ноль. Лучше так:

    Код (Text):
    for(z = n-1; z >= 0; z--)
    {
    if( a[z]!=0 )
    s = s + a[z];
    else
    break;
    }
    или немного короче:
    Код (Text):
    for(z = n-1; z >= 0 && a[z]!=0; z--)
    {
    s = s + a[z];
    }
    Кроме того правила хорошего стиля требует проверять ввод пользователя, тем более что для этого достаточно написать:

    Код (Text):
    cin >> n;

    if(n > 50)
    n = 50;
    else if(n < 1)
    n = 0;
    В противном случае может получиться запись за границы массива, что скорее всего приведет к краху программы. Понимаю, что пример учебный, но ничего с собой поделать не могу, слишком мазолит глаза. :(

    Удачи.
     
  11. IaElka

    IaElka Гость

    :(Благодарю!!!!! :)
     
Загрузка...
Похожие Темы - Работа текстовым файлом
  1. studentrtf
    Ответов:
    1
    Просмотров:
    1.565
  2. Andrey Kha
    Ответов:
    0
    Просмотров:
    20
  3. Hoasker
    Ответов:
    0
    Просмотров:
    64
  4. garri671
    Ответов:
    0
    Просмотров:
    52
  5. lelik200969
    Ответов:
    0
    Просмотров:
    50

Поделиться этой страницей