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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 05.05.2010, 20:43   #1
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
По умолчанию Процедуры: Ввод(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 в 00:34.
FYBVFPFYBC вне форума Ответить с цитированием
Старый 06.05.2010, 12:10   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Вот так процедура чтения будет работать.
И еще. когда ее вызываешь - параметры перепутаны местами.
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, 22:15   #3
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
По умолчанию

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 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS