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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2013, 01:17   #1
ddnnbb
 
Регистрация: 06.06.2013
Сообщений: 3
По умолчанию Нужна помощь ! Ассемблер .Сравнение с текущей датой.

Здравствуйте уважаемые!

Задание такое - В текстовом файле представлены названия лекарств, срок годности, стоимость. Вывести на экран данные о лекарствах с истекшим сроком годности на сегодняшний день

Я написал программу которая выводит содержимое текстового файла на экран .
А проблема в следующем : Как сделать так чтобы она выводила лекарства с истекшим сроком годности ?

Я примерно понимаю алгоритм что нужно брать дату с компьютера и сравнивать с датой в текстовом файле .
Но до конца понять не могу и в принципе не знаю как нужно дополнить код .

Помогите кто чем сможет!!! Заранее спасибо!

Вот исходник
Код:
1 .model small 
2 DATA SEGMENT
3 path db "fuck.txt",0     ; имя файла для октрытия
4 buf db ?
5 DATA ENDS
6
7 SSEG SEGMENT STACK
8 db 200 dup(?)
9 SSEG ENDS
10
11 CODE SEGMENT
12 ASSUME CS:CODE, DS:DATA, SS:SSEG
13 begin:
14 mov ax,DATA       ; настроим DS
15 mov DS,ax           ; на реальный сегмент
16 ;открываем файл
17 mov ax,3d00h       ; открываем для чтения
18 lea dx,path          ; DS:dx указатель на имя файла
19 int 21h                ; в ax деcкриптор файла
20 jc exit                 ; если поднят флаг С, то ошибка открытия
21 
22 mov bx,ax          ; копируем в bx указатель файла
23 xor cx,cx 
24 xor dx,dx
25 mov ax,4200h
26 int 21h              ; идем к началу файла
27 out_str:  
28 mov ah,3fh    ; будем читать из файла
29 mov cx,1       ; 1 байт
30 lea dx,buf      ; в память buf
31 int 21h 
32 cmp ax,cx     ; если достигнуть EoF или ошибка чтения
33 jnz close       ; то закрываем файл закрываем файл
34 mov dl,buf
35 mov ah,2      ; выводим символ в dl
36 int 21h         ; на стандартное устройство вывода
37 jmp out_str
38 close:          ; закрываем файл, после чтения
39 mov ah,3e
40 int 21h
41 exit:            ; завершаем программу
42 mov ah,4ch
43 int 21h
45 CODE ENDS
46 end begin
47
ddnnbb вне форума Ответить с цитированием
Старый 23.10.2013, 01:48   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 mov ah,3fh    ; будем читать из файла
29 mov cx,1       ; 1 байт
30 lea dx,buf      ; в память buf
читать можно и по одному байту, но результат чтения накапливать в строке, разбирать эту строку (или, как ещё говорят - "парсить"),
выделять из строки нужные части, в вашем случае дату истечения срока годности (это же имеется под понятием "срок годности" в данном случае?),
полученную дату разобрать на составляющие (год, месяц, день) и перевести их из строкового представления в числовое.
и вот только после этого полученные числа можно сравнить с текущей датой.


p.s.
Цитата:
Код:
path db "fuck.txt",0
согласен! Зачем подобные задачи решать на Ассемблере?! Неужели ЯВУ отменили?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 03:03   #3
ddnnbb
 
Регистрация: 06.06.2013
Сообщений: 3
По умолчанию

Цитата:
читать можно и по одному байту, но результат чтения накапливать в строке, разбирать эту строку (или, как ещё говорят - "парсить"),
выделять из строки нужные части, в вашем случае дату истечения срока годности (это же имеется под понятием "срок годности" в данном случае?),
полученную дату разобрать на составляющие (год, месяц, день) и перевести их из строкового представления в числовое.
и вот только после этого полученные числа можно сравнить с текущей датой.
А может вы еще знаете как конктретно это делать?..мне не один человек это уже говорит... я не умею со строками работать...учусь только...

Цитата:
согласен! Зачем подобные задачи решать на Ассемблере?! Неужели ЯВУ отменили?!
Ассемблер в универе проходим вот
ddnnbb вне форума Ответить с цитированием
Старый 23.10.2013, 08:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ddnnbb Посмотреть сообщение
А может вы еще знаете как конктретно это делать?..мне не один человек это уже говорит... я не умею со строками работать...учусь только...
ну, разумеется знаю.
что "разобрать" строку на отдельные элементы, она должна СТРОГО соответствовать определённому формату (шаблону)
Вам же текстовый файл не дали, можно любой свой придумать?..
Тогда, можно, конечно, с помощью scasb искать очередные разделители (ну, например, пробелы или запятые, или точку с запятой - что Вы сами придаемете), но проще сделать файл, состоящий из подстрок (элементов == столбцов) ФИКСИРОВАННОЙ длины.
например, первые 12 символов дата в формате ДД.ММ.ГГГГ (где дд,мм,ггг - это числа - день, месяц, год).
Тогда Вам достаточно прочитать первые 12 символов, потом из полученной строки взять первые два символа, перевести их в число (поиск по форуму, найдете код), получите дату срока годности, потом сдвинуть индекс на 1 (это пропустит точку), потом из этой же строки взять по индексу очередные два символа -> преобразовать в число, получите месяц, потом тоже самое повторить для года.

Поймите, что то, что на Паскале (ну или Delphi/С/C++/C#/Java) займёт пять минут (это ещё и с отладкой), на Ассемблере потребует (ну вот для примера лично у меня) over 2-3 часа.
А теперь подумайте, буду ли я тратить два часа своей жизни на то, чтобы писать никому не нужный код на этом низкоуровневом Ассемблере?!!

поэтому у Вас следующие пути:
вариант 1. (наиболее предпочтительный). Вы находите поиском по форуму и по интернету примеры аналогичных программ, разбираетесь в коде, если в вашем коде возникает затык, который Вы самостоятельно решить не можете - тут, в теме на форуме выкладываете полностью свой код, описываете подробно проблему и, скорее всего, получаете помощь в виде указания ошибки или исправленного кода.

Вариант 2. Быстрый (и неправильный, но зато думать почти не придётся) - платите деньги и получаете готовый код (см. раздел Фриланс). Плохо в этом методе то, что у Вас, возможно, возникнут проблемы при сдаче (защите) данной программы, или при написании аналогичной программы, например, на контрольной. Впрочем, если Вы тщательно проштудируете полученную программу, изучите её, пропустите, так сказать, через себя, то, возможно, и сможете защить/объяснить её и написать аналогичную при необходимости.

Вариант 3. Подождать чуда. Тут на форуме множество профи, к тому же и альтруистов. Возможно, кто-то напишет подобную программу за xx минут, которые у него есть свободные, возможно (кстати, достаточно вероятно) у кого-го уже есть готовый код, который делает нечто подобное. и он это код доработает под вашу задачу или просто так отдаст Вам и Вы самостоятельно доработаете код под свои нужды.



Цитата:
Сообщение от ddnnbb Посмотреть сообщение
Ассемблер в универе проходим вот
изверги у Вас преподаватели! Так им и передайте!
Это хоть курсовой проект? Не простая лаба или задание на допуск?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 08:52   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Это хоть курсовой проект? Не простая лаба или задание на допуск?
Если судить по моим преподавателям, то это легкая разминка перед лабораторной)))

По сути же, без "fuck.txt" с этой задачей даже связываться неинтересно... Структура исходных данных определяет стратегию оптимального решения.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 23.10.2013 в 08:59.
DiemonStar вне форума Ответить с цитированием
Старый 23.10.2013, 09:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Если судить по моим преподавателям, то это легкая разминка перед лабораторной)))
ОМГ! Сочувствую! А зачем?! Ну ладно бы ещё win32 код, а то - прерывания DOS, который уже скорее мёртв, чем жив...
ну, в качестве "прописей" в рамках обучения письму, возможно, что и покатит. Но, имхо, полученные знания явно не стоят затраченных усилий...


Цитата:
Сообщение от DiemonStar Посмотреть сообщение
По сути же, без "fuck.txt" с этой задачей даже связываться неинтересно... Структура исходных данных определяет стратегию оптимального решения.
по сути я с этим согласен. Только, рискну предположить, что исходный текстовый файл автору топика не был предоставлен. А значит, в его воле использовать такую структуру, которая позволит решать задачу с минимальными затратами. Имхо, конечно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 09:43   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
ОМГ! Сочувствую! А зачем?!
У меня специальность связанная с проектированием ПК, поэтому отработка взаимодействия с аппаратной частью на низком уровне одно из необходимых требований к специалисту. Так что получение и обработка данных из портов, прерываний BIOS и DOS, написание своих обработчиков, резидентов очень стимулирует к пониманию процесса взаимодействий как на программном, так и на аппаратном уровне.

Цитата:
Только, рискну предположить, что исходный текстовый файл автору топика не был предоставлен.
Я полностью с этим солидарен - имя файла говорит об этом с 99% вероятности.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 23.10.2013, 09:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
У меня специальность связанная с проектированием ПК, поэтому отработка взаимодействия с аппаратной частью на низком уровне одно из необходимых требований к специалисту. Так что получение и обработка данных из портов, прерываний BIOS и DOS, написание своих обработчиков, резидентов очень стимулирует к пониманию процесса взаимодействий как на программном, так и на аппаратном уровне.
Да. В таком разрезе - согласен, Вам это необходимо!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение с текущей датой Ks2010 SQL, базы данных 10 09.02.2011 16:23
запрос с текущей датой ГОСЕАН Помощь студентам 1 13.01.2011 13:05
Сравнение, нужна помощь! Wolve Microsoft Office Excel 11 12.10.2009 19:12
Создать папку с текущей датой Dorvir Microsoft Office Excel 1 16.07.2008 10:10
нужна помощь, сравнение строк в Си 3.1 feranic Помощь студентам 5 24.04.2008 17:57