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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2013, 18:51   #1
arai uzbekova
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 28
По умолчанию работа с текстовыми файлами

пусть в текущем каталоге имеется текстовый файл,каждая строка которого содержит информацию след.вида:

Название товара кол-во кг цена 1 кг
(например строка файла может иметь вид:Сахар 30 75)

составить программу,которая выполнит след:
определит общее кол-во кг всех товаров
arai uzbekova вне форума Ответить с цитированием
Старый 07.04.2013, 19:25   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Думаю, задача поставлена недостаточно корректно:
Автомобиль Peugeot 408 1375 413.82
s-andriano вне форума Ответить с цитированием
Старый 07.04.2013, 19:50   #3
arai uzbekova
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 28
По умолчанию

учитель мне так дал,не должно быть
arai uzbekova вне форума Ответить с цитированием
Старый 07.04.2013, 20:47   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ну так уточните задачу.
В России цены принято указывать в рублях и копейках, следовательно, нужно как-то либо обрабатывать эту ситуацию, либо явно оговаривать, что в цене копейки отсутствуют.
Иначе нужно говоритиь, скажем, о японских иенах - они на более мелкие денежные единицы не делятся.
s-andriano вне форума Ответить с цитированием
Старый 07.04.2013, 20:54   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
arai uzbekova
Читать из файла в строку ты умеешь?
Вот тебе функция:
Код:
function Kg(s:String):Double;
var i:integer; r:Double;
begin
 i:=pos(' ',s); delete(s,1,i+1);
 i:=pos(' ',s); s:=copy(s,1,i);
 val(s,r,i);
 Kg:=r;
end;
И Kg('Сахар 30 75') даст 30 если наименование товара не содержит пробелов, и между элементами пробел всегда один.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2013, 21:16   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
И Kg('Сахар 30 75') даст 30 если наименование товара не содержит пробелов, и между элементами пробел всегда один.
Вообще-то:
Код:
function Kg(s:String):Double;
var i:integer; r:Double;
begin
 i:=pos(' ',s); delete(s,1,i);
 i:=pos(' ',s); s:=copy(s,1,i-1);
 val(s,r,i);
 Kg:=r;
end;
Да и то на приведенной мной во втором посте строке выдает 0.

На мой взгляд, полагаться, что наименование товара всегда состоит из единственного слова - слишком сильное предположение.
А раз так, разбирать строку нужно не с начала, а с конца.

PS. Если не секрет, зачем преобразовывать число в вещественное?
s-andriano вне форума Ответить с цитированием
Старый 07.04.2013, 21:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Вообще-то:
Пусть автор сам поправит как нужно.
Цитата:
зачем преобразовывать число в вещественное?
Просто так.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2013, 22:43   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Вполне логично.
s-andriano вне форума Ответить с цитированием
Старый 11.04.2013, 19:35   #9
arai uzbekova
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 28
По умолчанию

вот я так набрала.что то не правильно.
Код:
program t1;
uses
  crt;
var
  f : text;
  nam, line, s : string;
  a, b, c, c1, i : integer;
begin
  clrscr;
  write('Имя файла : ');
  readln(nam);
  assign(f,nam);
  reset(f);
  if ioresult<>0 then writeln('Файл не найден.')
  else 
   begin
   c1 := 0;
   while not eof(f) do
     begin
       readln(f,line);
       s := '';
       i := pos(' ',line)+1;
       b := 0;
       while b=0 do
       begin
         s := s + line[i];
         val(s,a,b);
         if b=0 then c := a
         else c1 := c1 + c;
         inc(i);
       end;    
     end;
   writeln('общее кол-во кг всех товаров : ',c1); 
   close(f);
   end;
  readln;
end.
arai uzbekova вне форума Ответить с цитированием
Старый 11.04.2013, 20:47   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. При правильно настроенном компиляторе сообщение 'Файл не найден.' не будет выдавать никогда. Вне зависимости от того, существует файл или нет.

2. В посте 6 я рекомендовал начинать обработку с конца строки и объяснял, почему именно так.

3. Честно говоря, так и не понял, что именно Вы пытаетесь сделать. Дополните программу комментариями, чтобы мы могли понять, то ли Вы делаете, что хотите. Особенно интересует кусок, начинающийся с оператора b := 0;
s-andriano вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами (С++) PoMaHTnK Помощь студентам 1 29.04.2011 17:19
Работа с текстовыми файлами. Константинн Помощь студентам 0 06.03.2011 12:50
Работа с текстовыми файлами OlegII Помощь студентам 6 08.12.2010 13:31
работа с текстовыми файлами бургер Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2010 15:18
РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ! roc Помощь студентам 8 16.05.2010 13:07