Динамические массивы структур

Тема в разделе "C/C++/C#", создана пользователем Romashkinu, 16 май 2011.

  1. Romashkinu

    Romashkinu Гость

    Доброго времени суток уважаемые программисты. Мне необходима ваша помощь.
    Прошу помочь написать программный код для выполнения задачи (И желательно объяснить его).

    Задача на тему "Динамические массивы структур"

    Задача звучит следующим образом:
    "Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Найти: перечень издательств, выпустивших максимальное число книг. Главное 1) Исходные данные вводятся из файла, 2)Результаты выводятся на экран и в файлы."

    P.S. Так же в методичке был пример решенного задания, но он с ошибками.


    Код (C++):
    # include <iostream.h>
    # include <fstream.h>
    # include <string.h>
    # include <iomanip.h>
    # include <stdlib.h>
    const int N=200;
    struct student
    {
    char name[30];
    int kurs;
    char gr[7];
    };
    struct group
    {
    char gr[7];
    int ng;
    };

    // Прототипы функций   
    student *inputstudentfile ( int &nn);    
    void outputstudent ( student  st[], int nn);
    group *perechengroup ( student  st[], int nn, int &kk);
    void outputgroup (group z[], int kk);
    void outputgroupfile (group z[], int kk);

    // Ввод исходного массива задолжников из файла
    student *inputstudentfile ( int &nn)
    {
    ifstream fin;
    char file[10];
    char iniz[7];           // рабочая переменная для инициалов
    student  t;           // рабочая переменная для подсчета записей в файле
    student *ps;
    int i;
    cout << ”Имя файла:;
    cin >> file;
    fin.open(file);
    if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}

    // подсчет записей в файле
    nn =0;
    do {
    fin >> t.name >> iniz >> t.kurs >> t.gr;
    nn++;
    }while (fin.good());
    nn--;
    fin.close();

    // выделение памяти для динамического массива
    ps= new student [nn];
    if( ps=NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}

    // ввод массива задолжников из файла
    fin.open(file);
    if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}
    for (i=0; i< nn; i++)
    {
    fin >> ps[i].name >> iniz >> ps[i].kurs >> ps[i].gr;
    strcat( ps[i].name, “ “);       //   добавление инициалов через
    strcat( ps[i].name, iniz);   //         пробел к фамилии
    }
    fin.close();
    return ps;
    }

    // Вывод массива задолжников на экран
    void outputstudent ( student  st[], int nn)
    {
    cout<< “Фамилия и инициалы    Курс Группа \n”;
    for (i=0; i<nn; i++)
    cout << setw(16)<< st[i].name << setw(7)<< st[i].kurs << setw(8)              << st[i].gr << endl;             
    }

    // Формирование перечня групп, имеющих задолжников
    group *perechengroup ( student  st[], int nn, int &kk)
    {
    int i,j,fl;
    group *p;

    // выделение памяти для динамического массива (перечня)
    p= new group [nn];
    if( p==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}

    kk=0;
    for ( i=0; i<nn; i++)
    {
    fl=1;
    for ( j=0; j<kk; j++)
    if (strcmp(st[i].gr, p[j].gr) == 0) { fl=1; p[j].ng++; }
    if (fl==1) { strcpy(p[k].gr, st[i].gr); p[k].ng =1; kk++; }
    }
    return p;
    }

    //  Вывод перечня групп, имеющих задолжников, на экран
    void outputgroup (group z[], int kk)
    {
    cout<< “ Группа Кол-во \n”;
    for (i=0; i< kk; i++)
    cout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl;           
    }

    //  Вывод перечня групп, имеющих задолжников, в файл
    void outputgroupfile (group z[], int kk)
    {
    оfstream fout;
    char file[10];
    int i;
    cout << ”Имя файла:;
    cin >> file;
    fout.open(file);
    if( !fout.good()) {cout<<”Файл не открыт.\n”; exit(1);}
    for (i=0; i< kk; i++)
    fout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl;           
    fout.close();    
    }

    /*основная функция программы */

    void main()
    {
    student  *pst;       // указатель на исходную таблицу задолжников
    int n;                    // n – число строк в исходной таблице
    group  *pz;         // указатель на перечень групп, имеющих задолжников
    int k;                    // к – число групп в перечне

    pst=inputstudentfile ( n);
    cout << ” Исходный массив структур. \n”;
    outputstudent ( pst, n);
    pz=perechengroup ( pst, n, k);
    cout << ” Перечень групп, имеющих задолжников. \n”;
    outputgroup ( pz, k);
    outputgroupfile ( pz, k);
    delete [] pst;
    delete [] pz;
    }
    Заранее спасибо
     
  2. Romashkinu

    Romashkinu Гость

    Прошу вас! Помогите!
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ну, в примере походу кавычки неправильные - вместо ” надо " - это можно сказу сказать. А что еще за ошибки, что не работает?
     
  4. Romashkinu

    Romashkinu Гость

    С остальном в целом всё работает (Добавил библиотеку conio, int i). Но всё равно не могу применить этот пример для решения своей задачи.
     
Загрузка...
Похожие Темы - Динамические массивы структур
  1. Rinulik
    Ответов:
    2
    Просмотров:
    1.393
  2. morpheus
    Ответов:
    0
    Просмотров:
    1.935
  3. Julia61
    Ответов:
    1
    Просмотров:
    1.229
  4. vladis222
    Ответов:
    2
    Просмотров:
    2.260
  5. Omh
    Ответов:
    9
    Просмотров:
    5.171

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