Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 05.05.2010, 21:43   #1
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
Репутация: 16
По умолчанию Процедуры: Ввод(text)-Вычисление(string)-Вывод(text)

Обращаюсь за помошью, т.к. сама уже давно не могу понять в чём дело.
Задание:
С массивами STRING, процедурами и текстовыми файлами.
Дан список вещей (10 предметов) в виде:
НАИМЕНОВАНИЕ ЦЕНА %ИЗНОСА
Данные в одной строке отделяются друг от друга пробелами. Используя 3-й столбец(%ИЗНОСА), сформировать продажную комиссионную цену и результаты вывести в виде:
Новая цена вещей
Стол - 1000 руб и т.д.

Формат входного файла:

CHAIR 1360 33
TABLE 1590 23
COMPUTER 30260 2
MOUSE 250 12
BOOK 200 79
TELEPHONE 2500 40
CUP 150 25
HEADPHONES 2000 33
PEN 10 10
KEYBOARD 420 7

Код:

program amber24;
uses crt;
const n=10;
var
        nme: string;
   prc,use: string;
          x,y: integer;
         a,b: integer;
       nprc: real;
 inpf,outf: text;

{reading}

procedure readin(var inpf: text;
                var nme,prc,use: string);
var x: integer;
next: boolean;
begin
x:=1;
          {цикл с чтением наименования}
repeat 
   begin
   next:=false;
   read(inpf,nme[x]);
   if ord(nme[x])=32 then begin delete(nme,x,1); next:=true; end;
   x:=x+1;
   end;
until next;
x:=1;
          {цикл с чтением цены}
repeat
   begin
   next:=false;
   read(inpf,prc[x]);
   if ord(prc[x])=32 then begin delete(prc,x,1); next:=true; end;
   x:=x+1;
   end;
until next;
x:=1;
          {цикл с чтением процента износа}
while not eoln(inpf) do
   begin
   read(inpf,use[x]);
   x:=x+1;
   end;
readln(inpf);
end;

{calculation}

procedure calcular(prc,use: string;
                             var nprc: real);
var x: integer;
a,b: integer;
next: boolean;
begin
x:=1;a:=0;b:=0;
val(prc,a,b);

{***calc***}

end;

{writing}

procedure writeout(var outf: text;
                        nme: string;
                       nprc: real);
var x: integer;
begin

{***write***}

end;

{main}

begin
x:=0;y:=0;
clrscr;
assign(inpf,'inpf.txt');
reset(inpf);
assign(outf,'outf.txt');
rewrite(outf);
for y:=1 to n do
   begin
   readin(inpf,prc,use,nme);
   calcular(prc,use,nprc);
   writeout(outf,nme,nprc);
   end;
close(inpf);
close(outf);
end.

Я знаю, что всё криво) и программа не дописана, т.к. ошибки уже в процедуре чтения. Во время отладки кажется, что процедура чтения не возвращает значения переменных и, как следствие, процедура Val в процедуре вычисления возвращает 0.
Не судите строго, знаю, что нужно учиться)

Последний раз редактировалось FYBVFPFYBC; 06.05.2010 в 01:34.
FYBVFPFYBC вне форума   Ответить с цитированием
Старый 06.05.2010, 13:10   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
Репутация: 138

icq: 345544269
По умолчанию

Вот так процедура чтения будет работать.
И еще. когда ее вызываешь - параметры перепутаны местами.
readin(inpf,prc,use,nme);
Сравни вызов и объявление!
Могу и дальше помочь. Только скажи в чем это написано. В смысле, не язык конечно, понятно что паскаль. А оболочка какая. вроде не Turbo Pascal 7.0. Я его использовал, неудобно...

procedure readin(var inpf: text;
var nme,prc,use: string);
var x: integer;
next: boolean;
Ch : Char;
begin
nme := '';
prc := '';
use := '';
{цикл с чтением наименования}
repeat
begin
read(inpf,Ch);
if ord(Ch)=32 then break
else nme := nme + Ch;
end;
until False;
{цикл с чтением цены}
repeat
begin
read(inpf,Ch);
if ord(Ch)=32 then break
else prc := prc + Ch;
end;
until False;

{цикл с чтением процента износа}
while not eoln(inpf) do
begin
read(inpf,Ch);
use := use + Ch;
end;
readln(inpf);
end;
__________________
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума   Ответить с цитированием
Старый 06.05.2010, 23:15   #3
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
Репутация: 16
По умолчанию

Z1000000, большое спасибо вам! Буквально спасли меня
Это получилось дальше:
Код:

{calculation}

procedure calcular(prc,use: string;
                        var nprc: real);
var a,b,c,d: integer;
begin
a:=0;b:=0;c:=0;d:=0;
val(prc,a,b);val(use,c,d);
nprc:=(a-((a/100)*c));
writeln(nme,' ',nprc:5:2);
end;

{writing}

procedure writeout(var outf: text;
                               nme: string;
                               nprc: real);
begin
write(outf,nme);write(outf,' ');write(outf,nprc:5:2);
writeln(outf);
end;

В качестве среды использую Pascal ABC 3.0.1.35
FYBVFPFYBC вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible types: 'String' and 'Text' eshik Помощь студентам 3 21.04.2010 00:41
из string в text lanus Помощь студентам 6 13.03.2010 10:16
File To Text HTL Общие вопросы Delphi 11 24.01.2010 12:28
text to jpg HTL Мультимедиа в Delphi 6 08.01.2010 05:04
Несовмешение 'String' and 'Text' (Delphi) rusell Помощь студентам 2 30.03.2009 22:27


07:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru