Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 5

Проанализировать содержимое файла

22.02.2019, 20:11. Показов 861. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каждая строка текстового файла «Лекарства от головной боли» в произвольной последовательности содержит:
название лекарства;
срок годности;
количество упаковок;
стоимость одной упаковки;
Например: Аспирин 8 упаковок 305,68 рублей 30-10-2021
Проанализировать содержимое файла. Создать программу, которая выделяет в строке указанные данные и вычисляет общую стоимость упаковок для каждого лекарства, срок годности которого не истек.
Результаты записать в текстовый файл (выходной), например:
Аспирин 2445,44
Определить количество строк во входном файле и записать в выходной файл.
Сам текстовый файл содержит следующее:
"Аспирин 8 упаковок 305,68 рублей 30-10-2021
25-12-18 Нурофен 416,75 рублей 5 упаковок
20-04-2012 3 упаковок парацетамол 4,50 рублей
10 упаковок анальгин 9,90 рублей 15-09-2023"
Буду благодарен за любую помощь!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2019, 20:11
Ответы с готовыми решениями:

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
3)Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.

Добавить к первому файлу содержимое второго файла, а ко второму файлу — содержимое первого.
11. Даны два файла одного и того же типа. Добавить к первому файлу содержимое второго файла, а ко второму файлу — содержимое первого. ...

13
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
23.02.2019, 13:27
У вас намеренно все данные в строке перепутаны?

Сначала «название—упаковок—цена—срок годности».
За тем «срок годности—название—цена—упаковок».
Ниже «срок годности—упаковок—название—цена».
И в последней «упаковок—название—цена—срок годности».

Ни какого порядка!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.02.2019, 13:35
Цитата Сообщение от JuriiMW Посмотреть сообщение
Ни какого порядка!
Видимо так задумано, находим слово с заглавной буквы и вещественное число.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
23.02.2019, 14:03
А если цена будет записана как целое число, тогда как?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.02.2019, 14:09
Pascal
1
2
3
4
var cena,x:real;
      k:integer;
...............................
val(s1,x,k);
if k=0 then cena:=x;
Целые числа входят в множество вещественных(действительных) чисел.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
23.02.2019, 14:12
Ну, дык, там же ещё упаковки замешаны…
0
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 5
23.02.2019, 16:12  [ТС]
Само задание стоит так, что все данные стоят не по порядку

Добавлено через 23 минуты
Данные стоят верно, так по заданию
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
24.02.2019, 09:56
На самом деле ничего сложного.
Читаем строку, разбираем по пробелам.
Если очередной элемент похож на дату (хх-хх-хх или хх-хх-хххх), то это дата. Нормализуем до xx-xx-xxxx.
Если после очередного элемента:
-- цифра или конец строки, то было наименование,
-- "рубл" -- была цена, выкидываем следующее слово,
-- "упаков" -- было количество, выкидываем следующее слово.
0
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 5
24.02.2019, 17:16  [ТС]
Помогите с программой!!!!)))))
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
24.02.2019, 21:18
Например, так
Может все-таки сами?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
uses Dos;
const
  TwoDigitYear=80; SuffLen=4; SuffPrice='рубл'; SuffQnt='упак';
type
  TDate = packed record
  case Integer of
    0: (d, m: Byte; y: Word);
    1: (AsLong: Longint);
  end;
  TRec = record
    name: String;
    Price, Qnt: Real;
    ExpDate: TDate;
  end;
 
function NextWord(const s: String; var b, e: Integer): Boolean;
begin
  while (b<=Length(s)) and (s[b]<=' ') do Inc(b); e:=b;
  while (e<=Length(s)) and not (s[e]<=' ') do Inc(e);
  NextWord:=b<e;
end;
 
function StrToDate(s: String; var d: TDate): Boolean;
var p, c: Integer;
begin with d do begin
  StrToDate:=False;
  p:=Pos('-',s); if not (p in [2,3]) then Exit;
  Val(Copy(s,1,p-1),d,c); if c<>0 then Exit;
  Delete(s,1,p);
  p:=Pos('-',s); if not (p in [2,3]) then Exit;
  Val(Copy(s,1,p-1),m,c); if c<>0 then Exit;
  Delete(s,1,p);
  Val(s,y,c); if c<>0 then Exit;
  if y<TwoDigitYear then Inc(y,2000) else if y<100 then Inc(y,1900);
  StrToDate:=True;
end; end;
 
function StrToReal(s: String; var r: Real): Boolean;
var p, c: Integer;
begin
  p:=Pos(',',s); if p<>0 then s[p]:='.';
  Val(s,r,c); StrToReal:=c=0;
end;
 
procedure GetToday(var d: TDate);
var dd, mm, dow: Word;
begin with d do begin
  GetDate(y,mm,dd,dow); d:=dd; m:=mm;
end; end;
 
var
  s, t, u: String;
  b, e, bb, ee, n: Integer;
  Today: TDate;
  r: TRec;
begin
  GetToday(Today);
  while not EoF do with r do begin
    ReadLn(s); b:=1; Inc(n); FillChar(r,SizeOf(r),#0);
    while NextWord(s,b,e) do begin
      t:=Copy(s,b,e-b);
      if StrToDate(t,ExpDate) then b:=e
      else begin
        bb:=e;
        if NextWord(s,bb,ee) then begin
          u:=Copy(s,bb,ee-bb); u:=Copy(u,1,SuffLen);
          if (u=SuffPrice) and StrToReal(t,Price) or 
             (u=SuffQnt) and StrToReal(t,Qnt)
          then begin
            b:=ee; Continue;
          end;
        end;
        if name<>'' then name:=name+' '; name:=name+t;
      end;
      b:=e;
    end;
    if Today.AsLong<ExpDate.AsLong then WriteLn(name,' ',price*qnt:0:2);
  end;
  WriteLn('Прочитано: ',n);
end.
0
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 5
26.02.2019, 22:12  [ТС]
Ваша программа выдает ошибку. Также я пробую сам, но доходя до дат возникает ошибка, не знаю что уж и делать
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
26.02.2019, 22:53
Ошибка-то где?
Bash
1
2
3
4
5
6
7
8
$ echo "Аспирин 8 упаковок 305,68 рублей 30-10-2021
25-12-18 Нурофен 416,75 рублей 5 упаковок
20-04-2012 3 упаковок парацетамол 4,50 рублей
10 упаковок анальгин 9,90 рублей 15-09-2023" | \
./test
Аспирин 2445.44
анальгин 99.00
Прочитано: 4
0
0 / 0 / 0
Регистрация: 22.02.2019
Сообщений: 5
26.02.2019, 23:25  [ТС]
Ошибка в 6 строке!!!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
26.02.2019, 23:30
Цитата Сообщение от ильгиз Алимов Посмотреть сообщение
Ошибка в 6 строке!!!
О Боже!!! Да?

Добавлено через 2 минуты
Хозяйке на заметку: для игрушечного PascalABC и PascalABC.NET на форуме есть специальные "загончики".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2019, 23:30
Помогаю со студенческими работами здесь

Проанализировать содержимое текстового файла
Создайте текстовый файл с примерным содержанием: 2 яблока стоят 34,58 рублей. 3 бутылки молока стоят 125,10 рублей. 2 булки хлеба...

Считать числа из файла, проанализировать и записать в другой файл
program if1; var a,b,c,n:integer; f1,f2: text; begin assign (f1,'input.txt'); assign (f2,'res.txt'); reset(f1); read(a,b); ...

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.

Добавить к первому файлу содержимое второго файла, а ко второму файлу — содержимое первого
Даны два файла одного и того же типа. Добавить к первому файлу содержимое второго файла, а ко второму файлу — содержимое первого.

Записать в текстовый файл содержимое Edit, и прочитать содержимое файла в Memo
Создать приложение которое создает текстовый файл текстовый файл text.txt записывает в него текст из окна edit и закрывает его. Затем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru