Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Разработка функции обработки динамического массива
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Angelito-deseado Angelito-deseado вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.06.2008
Thumbs down Разработка функции обработки динамического массива - 17.06.2008, 21:12

Программа должна расчитывать излишний или недостающий вес человека относительно его роста. Расчет происходит по формуле Вес (кг) / рост (м) х рост (м).
необходимо написать диалоговую программу, которая будет работать с данными в памяти компьютера. Данные должны сохраняться в компьютере как динамический массив, разработать функции обработки массива. Данные сохраняются в виде бинарного файла. Необходимо создать в программе выпадающее меню, предусматривающие возможности:
-просмотреть массив
-отредактировать
-удалить
- сохранить массив данных в файле
для каждого пункта меню разработать отдельную функцию. прототипы функций в отдельный файл h, значения функций тоже в файл h. Основная программа должна содержать только main-функцию.
Язык программирования Си, среда разработки программы Borland C.
Работа должна быть выполнена как библиотека функций, имеющих общий программный интерфейс и как работающая программа позволяющая продемонстрировать работу всех функций в любой последовательности через систему меню.
В общем программа создает базу данных, но почему то не работает! Помогите найти ошибки, вопрос жизни и смерти!

вот что уже есть:
Main
Код:
#include <stdio.h>
#include "patient.h"
#include <conio.h>
#define MENU_LOAD 0
#define MENU_LIST 1
#define MENU_ADD 2
#define MENU_DELETE 3
#define MENU_INFO 4 
#define MENU_SAVE 5
#define MENU_QUIT 6
void DisplayMenu() {
    printf("%d. to load file",MENU_LOAD);
    printf("\n%d. to list patients",MENU_LIST);
    printf("\n%d. to add patient ",MENU_ADD);
    printf("\n%d. to delete patient",MENU_DELETE);
    printf("\n%d. to get info about patient",MENU_INFO);
    printf("\n%d. save file",MENU_SAVE);
    printf("\n%d. quit program\n",MENU_QUIT);


};

int main () {
    PatientList * patientList=NULL;
    PatientList * temp;
    int n=0;
    int numberOfPatients = 0;
    Patient patient;
    patient.name = new char[80];
    DisplayMenu();
    char c;
    while(c=getch()) {
        switch(c-'0') {
        case MENU_LOAD :
            break;

        case MENU_LIST :
            printf("Patients : \n");
            DisplayNames(patientList,n);
            //DisplayMenu();
            break;

        case MENU_ADD :
            InputPatient(&patient);
            temp=AddPatient(patientList,&patient,&n);
            if(temp!=NULL) patientList=temp;
            DisplayMenu();
            break;
        case MENU_DELETE :
            printf("input patient's name : ");
            scanf("%s",patient.name);
            DeletePatient(patientList,patient.name,&n);
            break;

        case MENU_INFO :
            printf("input patient's name : ");
            scanf("%s",patient.name);
            DisplayPatient(FindPatient(patientList,patient.name,&n));
        //    DisplayMenu();

            break;

        case MENU_SAVE :
            SaveList(patientList,&n);
            DisplayMenu();
            break;

        case MENU_QUIT :
            return 0;
            break;


        };
    };




    return 0;
};
Файл с функциями h:
Код:
#include <stdio.h>
#include <string.h>
struct Patient { 
    float height; // height of patient in meters;    
    float weight; // width in kilogramms
    char * name; // name of patient
};
struct PatientList {
    Patient patient;
    PatientList* next;
};
void DeleteList(PatientList* list) {
    PatientList * t;
    while(list !=NULL) {
        t=list->next;
        delete []list->patient.name;
        delete list;
        list = t;
    };

};
PatientList* AddPatient(PatientList* list,Patient * patient,int * n) {
    if(list==NULL) {
        list= new PatientList;
        list->patient.height=patient->height;
        list->patient.weight=patient->weight;
        list->patient.name = new char[strlen(patient->name)];
        for(int i=0;i<strlen(patient->name);i++) list->patient.name[i]=patient->name[i];
        list->patient.name[strlen(patient->name)]=0;
        list->next=NULL;
        *n++;
        return list;
    };
    if(list->next!=NULL)AddPatient(list->next,patient,n);
    else {
        list->next=new PatientList;
        list=list->next;
        list->patient.height=patient->height;
        list->patient.weight=patient->weight;
        list->patient.name = new char[strlen(patient->name)];
        for(int i=0;i<strlen(patient->name);i++) list->patient.name[i]=patient->name[i];
        list->patient.name[strlen(patient->name)]=0;
        list->next=NULL;
        *n++;
        return NULL;
    };
    return NULL;
};
void DeletePatient(PatientList * list,char * name,int * n ) {
    if(list==NULL) return;
    if(list->next==NULL) return;
    if ( strcmp(list->next->patient.name,name) ) {
        list=list->next;
        DeletePatient(list,name,n);
        return;
    };
    PatientList* t = list->next->next;
    delete [] list->next->patient.name;
    delete list->next;
    list->next=t;
    *n--;
};
/*void DeletePatient(PatientList * list,int index,int * n ) {
    if(index>=*n) return;

    if ( n>0 ) {
        list=list->next;
        DeletePatient(list,index,n);
        return;
    };
    PatientList* t = list->next->next;
    delete [] list->next->patient.name;
    delete list->next;
    list->next=t;
    *n--;
};*/
Patient* FindPatient(PatientList* list,int index,int*n) {
    if(index>=*n) return NULL;
    if ( index>0 )
        return FindPatient(list->next,index-1,n);

    return &list->patient;
};
Patient* FindPatient(PatientList* list,char* name,int * n) {
    if(list==NULL) return NULL;
    if ( strcmp(name,list->patient.name) ) 
        return FindPatient(list->next,name,n);
    
    return &list->patient;
};
void DisplayNames(PatientList * list,int n,int i=1) {
    if(list==NULL)return;
    printf("         %d. %s\n",i,list->patient.name);
    DisplayNames(list->next,n,i+1);
};
void InputPatient(Patient * patient ) {
    printf("enter patient's name(80 symbols max) :" );
    scanf("%80s",patient->name);
    printf("enter patient's height : ");
    scanf("%f",&patient->height);
    printf("enter patient's weight : ");
    scanf("%f",&patient->weight);

};
void DisplayPatient(Patient * patient) {
    if(patient==NULL) return;
    float k = patient->weight/(patient->height*patient->height);
    printf("Patient's name : %s\n",patient->name);
    printf("Patient's height : %f meters\n",patient->height);
    printf("Patient's weight : %f kilogramms\n",patient->weight);
    if(k<18.5 ) {
        printf("Patient has low weight (k=%f)\n",k);
        return;
    }
    if(k<25 ) {
        printf("Patient has normal weight (k=%f)\n",k);
        return;
    }
    if(k<30 ) {
        printf("Patient has extra weight (k=%f)\n",k);
        return;
    }
    if(k<35 ) {
        printf("Patient has first class adiposity (k=%f)\n",k);
        return;
    }
    if(k<40 ) {
        printf("Patient has second class adiposity (k=%f)\n",k);
        return;
    }
        printf("Patient has second class adiposity (k=%f)\n",k);
    return;
};
void SaveList(PatientList * list,int *n) {
    char filename[80];
    int t;
    printf("input filename : " );
    scanf("%s",filename);
    FILE * f = fopen(filename,"wb");
    fwrite(n,1,sizeof(int),f);
    while(list !=NULL ) {
        fwrite(&list->patient.height,1,sizeof(float),f);
        fwrite(&list->patient.weight,1,sizeof(float),f);
        t=strlen(list->patient.name);
        fwrite(&t,1,sizeof(int),f);
        for(int i=0;i<t;i++) fwrite(&list->patient.name[i],0,sizeof(char),f);
        list=list->next;
    };
};
void LoadList(PatientList**list,int * n) {
/*    DeleteList(*list);
    char filename[80];
    int t;
    printf("input filename : " );
    scanf("%s",filename);
    FILE * f = fopen(filename,"rb");
    fread(n,1,sizeof(int),f);
    for(int i=0;i<*n;i++) {
        fread(&list->patient.height,1,sizeof(float),f);
        fread(&list->patient.weight,1,sizeof(float),f);
        

    };
    */
};
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача динамического массива как аргумент _Лют_ С/С++ 1 01.01.2012 19:22
Создание динамического массива kilimi Вопросы начинающих программистов 3 24.06.2011 15:50
1.5 Разработка динамических структур данных и функций их обработки kilimi Вопросы начинающих программистов 6 16.06.2011 11:38
Как добавить и удалить элемент из динамического массива Kopcap10000 Visual C++ 3 07.04.2011 04:47
Замена элементов динамического массива DarkZiMAN С/С++ 2 31.12.2009 13:12
Высвобождение динамического массива Cyclamen Persicum Delphi 36 06.11.2008 10:00
Реализация динамического двумерного массива на С++ -R- Вопросы начинающих программистов 1 18.04.2008 18:18
Создание в конструкторе динамического массива imported_BrAT C++ Builder 13 07.06.2006 09:03
StackOverflowException заполнение динамического массива FlyCube Visual C++ 2 11.04.2006 13:01
Создание 2-ух мерного динамического массива user_c C++ Builder 5 14.12.2005 21:07
Распечатка 2-мерного динамического массива Rockie С/С++ 7 20.10.2005 21:25
Как передать в процедуру часть динамического массива Dian Delphi 3 13.05.2005 20:00



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов