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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2011, 20:02   #1
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию Строковый файл

Дан строковый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год — четыре (например, «16/04/2001»). Найти строку, содержащую самую раннюю весеннюю дату. Если даты с требуемым временем года в файле отсутствуют, то вывести пустую строку.

Обьясните пожалуйста что такое строковый файл представляет собой вообще,и алгоритм моих действий.(язык обычный Си)

В частности попытка была создать файл(предварительно создала файл содержащий даты),обьявить переменные -дата ,день и месяц типа char,дальше с помощью цикла if пыталась сравнить позицию сначала месяца
Код:
month=date[4];
					if( month== '3 || month=='4' || month=='5'
затем числа,с числом не заладилось. если не сложно с кодом

Последний раз редактировалось ensoleille; 11.07.2011 в 20:04.
ensoleille вне форума Ответить с цитированием
Старый 11.07.2011, 20:25   #2
Nedward
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 85
По умолчанию

Без понятия, что такое строковый файл (даже воображение отказывает ) - возможно имелось в виду текстовый ?
Я бы в цикле построчно читал из файла (возможно под "строковым файлом" подразумевалось то, что каждая дата идет с новой строки? они ведь идут построчно, верно? ) и сохранял сразу в натуральные переменные. Потом проверял - весенняя ли дата, и если да - сравнивал с предыдущей запомненной датой. С удовольствием решил бы это на С++, но Си... фи, не буду себя развращать
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (c) Martin Golding
Nedward вне форума Ответить с цитированием
Старый 11.07.2011, 21:02   #3
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

нету пока времени, может ночью напишу читайте
http://en.wikipedia.org/wiki/String.h
Alkagolik вне форума Ответить с цитированием
Старый 12.07.2011, 21:18   #4
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

буду очень признательна
ensoleille вне форума Ответить с цитированием
Старый 12.07.2011, 21:37   #5
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

хотя вот,наткнулась на решение в с++
Код:
#include <iostream.h>
#include <fstream.h>
using namespace::std;
unsigned int date,datemin = ~0, d, m , y; 
fstream  filestream("c:\\temp\\numbers.txt");
char t;
int main()
{
do{
filestream >> d >> t >> m >> t >> y;
if(filestream.fail()) break;
if(m < 3 || m > 5 || d > 31 || y > 9999) continue;
date = (y << 16) | (m << 8) | d;
if(date < datemin)
  datemin = date;
}while(true);
y = datemin >> 16;
m = (datemin >> 8) & 0xFF;
d = datemin & 0xFF;
cout << d << '/' << m << '/' << y;
cin >> y;
return 0;
}
толком не поняла что откуда
попытка сделать это же в си ни к чему не привела.просто черный экран при запуске и все,ничего не выводит,да и в добавок почему то удаляет уже записаные даты из файла
Код:
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main()
{

	FILE *in;


	in=fopen("in.txt","r");

	if( !(in=fopen("in.txt","w+")))
		{
			printf("FILE NOT OPEN!");
		return;
		}

	int	d,m,g;
	char t;
	int date,datemin;

do
	{
	fscanf(in,"%d/%d/%d",&d,&m,&g);
	if(m < 3 || m > 5 || d > 31 || g > 9999)
	if(date < datemin)
  datemin = date;}
while(true);
g = datemin >> 16;
m = (datemin >> 8) & 0xFF;
d = datemin & 0xFF;
	

	printf("%d/%d/%d",d,m,g);
	fclose(in);
	getch();
}

Последний раз редактировалось ensoleille; 12.07.2011 в 21:53.
ensoleille вне форума Ответить с цитированием
Старый 15.07.2011, 00:10   #6
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

ну как бэ вот в сипипях. код проверен, рабочий.
Код:
#include <fstream>
#include <iostream>
#include <string>

bool check_year(std::string ye, std::string s);
bool check_month(std::string s);
bool check_date(std::string s1, std::string s2);

int main()
{
	std::string str="31", year, tmp;
	const char *fileName="txt.txt";
	bool check1= false, check2 = false;
	std::ifstream ifs(fileName);
	if (!ifs.is_open()){
		std::cout << "Can't open file" << fileName<<"for input"<<std::endl;
		return 1;
	}
	std::cout << "Enter the year at search: ";
	std::cin >> year;
	do{
		std::getline(ifs, tmp);
		if (check_year(year, tmp)){
			check1 = true;
			if (check_month(tmp)&&check_date(tmp, str)){
				str=tmp;
				check2 = true;
			}
		} 
	}while (ifs);
	ifs.close();
	if (check1&&check2)std::cout << str << std::endl;
	else if (check1&&!check2) std::cout << "A month of spring not found";
	else std::cout << "A year was not current, please try again";
	return 0;
}

bool check_year(std::string ye, std::string s)
{
	if (ye[0]==s[6]&&ye[1]==s[7]&&ye[2]==s[8]&&ye[3]==s[9]&&ye[4]==s[10])
	return 1;
	else return 0;
}

bool check_month(std::string s)
{
	if (s[3]==48&&(s[4]==51||52||53))
	return 1;
	else return 0;
}

bool check_date(std::string s1, std::string s2)
{
	if (s1[0] <s2[0]) return 1;
	else if (s1[0]>s2[0]) return 0;
	else{
		if (s1[1]>s2[1]) return 0;
		else return 1;
	}
}
Переделывайте на Си и вперед за орденами.
З.Ы. Программа не учитывает исключений, и ошибок в тексте файла

Последний раз редактировалось Alkagolik; 15.07.2011 в 05:24.
Alkagolik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строковый Тип!!! LegionuS Паскаль, Turbo Pascal, PascalABC.NET 6 29.05.2011 17:00
Паскаль. Создать строковый файл diane Помощь студентам 0 24.05.2011 21:36
Строковый калькулятор Blad47 Помощь студентам 9 08.10.2010 00:23
Строковый тип McJordan Паскаль, Turbo Pascal, PascalABC.NET 1 26.08.2010 17:22
строковый тип gessi Помощь студентам 3 25.11.2009 09:40