Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2010, 06:09   #11
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Цитата:
Покажи структуру записей в файле
Файл создаеся 1-ой программой в первом сообщениии
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 22.10.2010, 20:35   #12
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Так ничего и не получилось с динамическим выделением памяти.
Сделал вот так (может быть кому то поможет)
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
bool Check (int *, int, int, int);
int SumDayMonth (int *, int);
struct history
	{
		char incident [30];
		int number;
		int month;
		int year;
		int daySum;
	};
 
int main()
{
	int sumEnterDay[2]; // Содержит начальную и конечную дату введенную пользователем
	int n=3, day, month, year, i;
	int daysMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	history a[]={"1 World war", 28 , 7, 1914, 0,  "Revolution", 7, 11, 1917, 0,  "2 World war", 1, 9, 1939, 0};

	for (i=0; i<n; i++)
		a[i].daySum=a[i].number+(SumDayMonth(daysMonth, a[i].month))+ a[i].year*366;

	FILE *F, *G;
	F=fopen("D:\\history", "wb");
	fwrite(&n, sizeof(int), 1, F);
	fwrite(a, sizeof(history), n, F);
	fclose(F);

	G=fopen("D:\\history", "rb");
	if (!G)
	{
		cout<<"File Not Found"<<"\n";
		return 1;
	}

	fread(&n, sizeof(int), 1, G);
	history *d= new history[n];
	fread(d, sizeof(history), n, G);

	for (i=0; i<n; i++)
		cout<<d[i].incident<<"\t"<<d[i].number<<"\t"<<d[i].month<<"\t"<<d[i].year<<"\n";

	for (i=0; i<2; i++)
	{
		cout<<"\n";
		if (i==0)
			cout<<"Enter initial date"<<"\n";
		else
			cout<<"Enter final date"<<"\n";

		do
		{
			cout<<"Enter day - "; 
			cin>>day;
			cout<<"Enter month - "; 
			cin>>month;
			cout<<"Enter year - "; 
			cin>>year;
		} while (!Check (daysMonth, day, month, year));

		sumEnterDay[i]=day+(SumDayMonth(daysMonth, month))+year*366;
	}

	for (i=0; i<n; i++)
		if (d[i].daySum>=sumEnterDay[0] && d[i].daySum<=sumEnterDay[1])
			cout<<d[i].incident<<"\t"<<d[i].number<<"\t"<<d[i].month<<"\t"<<d[i].year<<"\n";

	fclose(G);
	return 0;
}

bool Check (int *daysM, int d, int m, int y) // Проверка корректности введенной даты
{
	
	if (d>daysM[m] || d<1)
	{
		cout<<"Incorrectly entered date"<<"\n";
		return false;
	}

	if (m>12 || m<1)
	{
		cout<<"Incorrectly entered date"<<"\n";
		return false;
	}

	if (y<1 || y>2010)
	{
		cout<<"Incorrectly entered date"<<"\n";
		return false;
	}
	return true; 
}

int SumDayMonth (int * daysM, int m) // Вычисляет сумму дней в месяцах до месяца указаного в дате
{
	int s=0;

	for (int i=0; i<m; i++)
		s+=daysM[i];

	return s;
}
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение файла lapo4ka1368 Общие вопросы C/C++ 0 07.04.2010 17:15
сохранение/чтение структуры с файла Vorname Общие вопросы C/C++ 4 10.11.2009 17:59
Запись структуры и чтение из файла [MI_nor] Общие вопросы C/C++ 6 08.04.2009 15:52
Чтение структуры файла SDK Помощь студентам 4 23.01.2008 19:30
чтение файла Arteom Общие вопросы Delphi 6 27.08.2007 18:15