Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 14.03.2012, 22:35   #1
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию [с] Динамическую структуру оформить в виде отдельного модуля.

В условии задачи есть пункт "Динамическую структуру оформить в виде отдельного модуля".
Я программу написал, но вообще не знаю как сделать в виде модуля.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _Element { 			//Структура для элемента очереди
           char nomer[8];
     	   	char name[20],surname[20],ot[20];
        	char data[11];
        	char tarif[16];					
	     struct _Element *next; 		//Указатель на следующий элемент
	} Element;
	Element *head = NULL, 			//Указатель на начало очереди
			 *tail = NULL; 			//Указатель на конец очереди

void Create(void);
void Destroy(void);
int Put(Element val);
int Get(Element *val) ;
void Input(void);
int Prov(Element p);
void Print(void);
void BIN(void);

int main(int argc, char *argv[])
{
	Element *new=NULL;
	Create();
	Input();
	Print();
	BIN();
	Destroy();
     return 0;
}
Подробное описание функций не пишу, т.к. очень много.

Последний раз редактировалось ACE Valery; 14.03.2012 в 23:19.
nicklifs вне форума Ответить с цитированием
Старый 15.03.2012, 09:11   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Unit1.h

Код:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _Element { 			//Структура для элемента очереди
		   char nomer[8];
			char name[20],surname[20],ot[20];
			char data[11];
			char tarif[16];
		 struct _Element *next; 		//Указатель на следующий элемент
	} Element;
	Element *head = NULL, 			//Указатель на начало очереди
			 *tail = NULL; 			//Указатель на конец очереди

void Create(void);
void Destroy(void);
int Put(Element val);
int Get(Element *val) ;
void Input(void);
int Prov(Element p);
void Print(void);
void BIN(void);



#endif
Unit1.cpp
реализация

Код:
#include Unit1.h

int main(int argc, char *argv[])
{
	Element *new=NULL;
	Create();
	Input();
	Print();
	BIN();
	Destroy();
     return 0;
}
Krok27 вне форума Ответить с цитированием
Старый 15.03.2012, 11:10   #3
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

А описание работы функций куда кидать(в какой файл)?
имя модуля любое? "Mod.H" подойдёт
файл "Mod.H" должен располагаться в папке с основной программой?

Я Вместо прототипов функций в файл Mod.H кинул описание функций. Компилирую на PELLES C файл "mail.c"
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(1): error #1036: Syntax error in #include.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(4): warning #2027: Missing prototype for 'Create'.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(5): warning #2027: Missing prototype for 'Input'.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(6): warning #2027: Missing prototype for 'Print'.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(7): warning #2027: Missing prototype for 'BIN'.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\main.c(8): warning #2027: Missing prototype for 'Destroy'.

Последний раз редактировалось nicklifs; 15.03.2012 в 11:17.
nicklifs вне форума Ответить с цитированием
Старый 15.03.2012, 11:13   #4
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Описание, это в смысле реализация? В Unit1.cpp
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 15.03.2012, 11:20   #5
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

да...
Программа на Си.
файл main.c
Код:
#include Mod.h
int main(int argc, char *argv[])
{
	Create();
	Input();
	Print();
	BIN();
	Destroy();
     return 0;
}
файл mod.h
Код:
#ifndef ModH
#define ModH
//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _Element { 			//Структура для элемента очереди
		   char nomer[8];
			char name[20],surname[20],ot[20];
			char data[11];
			char tarif[16];
		 struct _Element *next; 		//Указатель на следующий элемент
	} Element;
	Element *head = NULL, 			//Указатель на начало очереди
			 *tail = NULL; 			//Указатель на конец очереди

void BIN(void){
	int num;
	while((num<1)||(num>9)){
		printf("Inter first number: ");
		fflush(stdin);
		scanf("%d",&num);
		if((num<1)||(num>9)) printf("Error.\n");
	}
	
	Element *p=head;
	if(!head){printf("Error.\n"); return;}
	FILE *f=fopen("1.txt","wb");
	while(head!=NULL){
		Get(p);
		char c[3];
		c[0]=p->nomer[0];
		int tt=atoi(c);printf("\n%d %d\n",tt,num);
		if (tt!=num) fwrite(&p, sizeof(Element), 1, f);
	}
  	fclose(f);
}

void Print(void){
	Element *p = NULL;
	p=head;
	if (!p) {printf("Error. "); return;}
	while (p){
		printf("%s %s %s %s %s %s\n",p->nomer,p->surname,p->name,p->ot,p->data,p->tarif);
		p=p->next;
	}
}

int Prov(Element p){
	
	int tt;
	char temp[5];
	//проверяем nomer
	if (strlen(p.nomer)!=7) return 1;
	else {
		tt=atoi(p.nomer);
		if ((tt<1000000)||(tt>9999999)) return 1;		
	}
	//проверяем дату
	if (strlen(p.data)!=10) return 1;
	if ((p.data[2]!='.')||(p.data[5]!='.')) return 1;  
	temp[0]=p.data[3];
	temp[1]=p.data[4];
     tt=atoi(temp);
     if ((tt<0)||(tt>12)) return 1;
	else {
	  if((tt==1)||(tt==3)||(tt==5)||(tt==7)||(tt==8)||(tt==10)||(tt==12)){
       		temp[0]=p.data[0];
			temp[1]=p.data[1];		  
     			tt=atoi(temp);
			if((tt<1)||(tt>31)) return 1;
	  }
	  if((tt==4)||(tt==6)||(tt==9)||(tt==11)){
			temp[0]=p.data[0];
			temp[1]=p.data[1];		  
     			tt=atoi(temp);
			if((tt<1)||(tt>30)) return 1;
	  } 
	  if(tt==2){//февраль+високосный год
			temp[0]=p.data[0];
			temp[1]=p.data[1];		  
     			tt=atoi(temp);
			int td=tt;//сохраняем день
			temp[0]=p.data[6];   temp[2]=p.data[8];
			temp[1]=p.data[7];   temp[3]=p.data[9];
			tt=atoi(temp);       
			if ((tt<1991)||(tt>2012)) return 1;
			if (tt%4==0) {
				if ((td<1)||(td>29)) return 1;
			}
			else {
				if ((td<1)||(td>28)) return 1;
		     }
	  }		
     }//else
	
	//проверяем ФИО
	if ((strlen(p.name)<3)||(strlen(p.surname)<3)||(strlen(p.ot)<3)) return 1;
	if ((strlen(p.name)+strlen(p.surname)+strlen(p.ot))>28) return 1;
	for(int i;i<strlen(p.surname);i++){
     		if ((p.surname[i]<'A')||(p.surname[i]>'z')) return 1;
	}
	for(int i;i<strlen(p.name);i++){
     		if ((p.name[i]<'A')||(p.name[i]>'z')) return 1;
	}
	for(int i;i<strlen(p.ot);i++){
     		if ((p.ot[i]<'A')||(p.ot[i]>'z')) return 1;
	}
	//проверяем тариф
	if ((strlen(p.tarif)>15)||(strlen(p.tarif)<3)) return 1;

return 0;
}

void Input(void){
	char str[80];   
	Element p;  
	
	while(strlen(str)>0){
			printf("Nomer FIO Data(dd.mm.yy) tarif: ");
			gets(str);
			if (strlen(str)==0) return ;
 			char *ptr = strtok(str," "); strcpy(p.nomer,ptr);
			if((ptr= strtok(NULL," ")) != NULL)  strcpy(p.surname,ptr);
			if((ptr= strtok(NULL," ")) != NULL)  strcpy(p.name,ptr);
			if((ptr= strtok(NULL,"  ")) != NULL) strcpy(p.ot,ptr);
			if((ptr= strtok(NULL,"  ")) != NULL) strcpy(p.data,ptr);
			if((ptr= strtok(NULL,"  ")) != NULL) { 
				strcpy(p.tarif,ptr); 
				while((ptr= strtok(NULL,"  ")) != NULL){
					strcat(p.tarif," "); 
					strcat(p.tarif,ptr);
				}
			}
		/*
			puts(p.nomer);
			puts(p.surname);
			puts(p.name);
			puts(p.ot);
			puts(p.data);
			puts(p.tarif);
		*/

			if (Prov(p)==0) Put(p);
			else printf("Error. ");	
	}//while
	

}
 
void Create(void) {
	head = tail = NULL;
}

void Destroy(void){
	while(head){
		tail = head;
		head = head->next;
		free(tail);
	}
	head = tail = NULL;
}

int Put(Element val) {
	Element *tmp = (Element*)malloc(sizeof(Element));
	if(!tmp) return 0;
	tmp->next = NULL;
	strcpy(tmp->nomer, (&val)->nomer) ;
	strcpy(tmp->name, (&val)->name) ;
	strcpy(tmp->surname, (&val)->surname) ;
	strcpy(tmp->ot, (&val)->ot) ;
	strcpy(tmp->data, (&val)->data) ;
	strcpy(tmp->tarif, (&val)->tarif) ;
	if(tail) tail->next = tmp;
	tail = tmp;
	if(!head) head = tail;
	return 1;
}

int Get(Element *val) {
	if(!head) return 0;
	Element *tmp = head;
	strcpy(val->nomer, tmp->nomer) ;
	strcpy(val->name, tmp->name) ;
	strcpy(val->surname, tmp->surname) ;
	strcpy(val->ot, tmp->ot) ;
	strcpy(val->data, tmp->data) ;
	strcpy(val->tarif, tmp->tarif) ;
	head = head->next;
	free(tmp);
	if(!head) tail = NULL;
	return 1;
}



#endif

Последний раз редактировалось ACE Valery; 15.03.2012 в 13:25.
nicklifs вне форума Ответить с цитированием
Старый 15.03.2012, 11:25   #6
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

#include "Mod.h" - программа запустилась
но предупреждения
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\Mod.h(32): warning #2027: Missing prototype for 'Get'.
J:\программирование\c\лабы\10 лаба\4-1 - копия - копия\Mod.h(146): warning #2027: Missing prototype for 'Put'.
nicklifs вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать динамическую структуру в составе которой есть динамическая структура Vladin Общие вопросы C/C++ 5 26.07.2011 14:08
Оформить процедуру и функцию в виде модуля пользователя и файла Anny_Apple Паскаль, Turbo Pascal, PascalABC.NET 6 13.03.2011 15:24
Создание отдельного модуля для класса... Mixim C++ Builder 2 24.04.2010 11:27
Нужно прочитать из файла txt в динамическую структуру dimalem Общие вопросы C/C++ 0 18.04.2010 15:16
Оформить в виде функций Smotritel89 Помощь студентам 2 04.11.2008 15:39