![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Виталий_Сигов |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте, уважаемые форумчане.
Решаю задачу с файлом записей: Каждая запись содержит следующую информацию об экспортируемых товарах: наименование, страна-экспортер, срок поставки, количество товара. Вывести сведения обо всех странах, в которые должен быть поставлен товар до указанной даты. Тип поля "Дата" у меня - строковый. Вводится дата в формате ДД.ММ.ГГГГ Вопрос: Как преобразовать значения ДД ММ ГГГГ из тсрокового в числовой формат и при этом сохранив знак "." ? Код своей программы привожу: Код program k_2_2; uses crt; label 1,4,5,6,8,9,10,12,20,30,40,18,19; type tovar=record naimenovanie:string[30]; strana_exporter:string[30]; data_postavki:string[10]; kolichestvo_tovara:byte; end; var tov:array[1..100] of tovar; f:file of tovar; date,str:string; k,l,n:integer; i:byte; begin 10:clrscr; textcolor(white); writeln(' Меню '); writeln(' 1: Создание файла* '); writeln(' 2: Чтение файла '); writeln(' 3: Добавление записи в файл '); writeln(' 4: Выборка записей из файла* '); writeln(' 5: Выход '); readln(k); case k of 1:goto 6; 2:goto 20; 3:goto 30; 4:goto 40; 5:goto 12; end; 6:clrscr; writeln('Введите полный адрес и имя типизированного файла');readln(str); {$I-} assign(f,str); rewrite(f); {$I+} if IoResult<>0 then begin writeln('Повтори ввод полного пути и имени типизированного файла*'); writeln; delay(5000); goto 6; end else {$I-} 8:writeln('Введите количество записей');readln(n); {$I+} if (IoResult<>0) or (n<=0) then begin writeln('Повтори ввод количества записей !!!'); delay(500); goto 8; end else writeln('Введите наименование товара, Страну - экспортер, срок поставки и количество товара *'); for i:=1 to n do begin writeln('Введите данные ',i,' - записи); with tov[i] do begin write('Введите наименование товара* : '); readln(naimenovanie); write('Введите страну - экспортер : '); readln(strana_exporter); write('Введите дату поставки : '); readln(data_postavki); {$I-} 9:write('Введите количество товара : '); readln(kolichestvo_tovara); {$i+} if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin writeln('Повтори ввод количества товара* !!!'); delay(5000); goto 9; end else writeln; writeln('Нажмите Enter');readln; end; write(f,tov[i]); end; close(f); goto 10; 20:clrscr; assign(f,str); reset(f); while not eof(f) do begin read(f,tov[i]); writeln(tov[i].naimenovanie); writeln(tov[i].strana_exporter); writeln(tov[i].data_postavki); writeln(tov[i].kolichestvo_tovara); end; close(f); readln; goto 10; 30:clrscr; assign(f,str); reset(f); n:=filesize(f); seek(f,n); n:=n+1; 18:writeln('Введите количество записей');readln(n); {$I+} if (IoResult<>0) or (n<=0) then begin writeln('Повтори ввод количества записей !!!'); delay(5000); goto 18; end else writeln('Введите наименование товара, Страну - экспортер, срок поставки и количество товара **'); for i:=1 to n do begin writeln('Введите данные ',i,' - записи); with tov[i] do begin write('Введите наименование товара* : '); readln(naimenovanie); write('Введите страну - экспортер : '); readln(strana_exporter); write('Введите дату поставки : '); readln(data_postavki); {$I-} 19:write('Введите количество товара : '); readln(kolichestvo_tovara); {$i+} if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin writeln('Повтори ввод количества товара* !!!'); delay(5000); goto 19; end else writeln; writeln('Нажмите Enter');readln; end; write(f,tov[i]); end; close(f); goto 10; 40:clrscr; assign(f,str); reset(f); writeln('Введите дату:'); readln(date); while not eof(f) do begin read(f,tov[i]); if tov[i].data_postavki<date then begin writeln(tov[i].naimenovanie); writeln(tov[i].strana_exporter); writeln(tov[i].data_postavki); writeln(tov[i].kolichestvo_tovara); end; end; close(f); readln; goto 10; 12:end. Т.е., допустим, ввожу дату в 1-й записи 15.11.2009, а во второй 24.12.2009. В итоге, если я введу дату 30.11.2009 выведутся обе записи и с датой 15.11.2009 и 24.12.2009. Может быть есть какая -то функция, позволяющая преобразовать значения из строкового в числовой формат ? И, если не трудно, можете привести пример ? |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Может быть есть какая -то функция, позволяющая преобразовать значения из строкового в числовой формат ? Вообще-то есть процедура Val. Тебе надо будет написать свою функцию сравнения дат. Пример был вот тут: Записи, списки (у тебя будет то же самое, только вместо обращения к полям записи будет Copy + Val для преобразования части строки в число). Попробуй, если не получится - поможем ![]() |
Виталий_Сигов |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Большое спасибо за подсказку. Попробовал сделать по аналогии с приведенным по ссылке примером - не получилось.
Будьте добры, помогите, пожалуйста. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Набирал прямо здесь:
function compare(d_1, d_2: string): integer;, функция вернет 0; если даты равны, 1, если первая дата ПОЗЖЕ второй; и (-1), если первая дата РАНЬШЕ второй. Естественно, ты должен гарантировать, что каждая дата будет представлена в формате DD.MM.YYYY, то есть, и день и месяц - двузначные, а год - четырехзначный. Иначе будет сбой в работе функции. |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Большое спасибо за помощь!
|
Виталий_Сигов |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Гость |
![]()
Сообщение
#7
|
Гость ![]() |
Спасибо большое за функцию, но, подскажите, пожалуйста, как ее вызвать в основной программе ?
Извините, что программа написана с использованием меток-это главное условие задачи.
Сообщение отредактировано: volvo - 29.10.2009 15:03 |
Виталий_Сигов |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Прошу прощения, забыл войти под своим логином.
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
{ if tov[i].data_postavki<date then } { <- Заменить на вызов функции: } P.S. Используй теги для Паскаля (CODE=pas) |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 12:38 |