Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ прога по записям

Автор: slava 3.10.2007 1:16

Вот сама задача:
1. Описать запись с именем Price, содержащую следующие поля:
название товара;
название магазина, в котором продаётся товар;
стоимость товара в рублях;
2. Написать программу, выполняющую следующие действия:
ввод данных с клавиатуры в массив, состоящий из восьми элеметов типа Price; записи должны быть
размещены в алфавитном порядке по названию товаров;
вывод на экран информации о товаре, название которого введено с клавиатуры; если такого товара нет,
вывести соответствующее сообщение;
запись массива в файл под заданным с клавиатуры именем.

Автор: Ozzя 3.10.2007 15:50

Цитата
воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!

Причем уже много-много раз. yes2.gif

Автор: slava 3.10.2007 20:55

program priceRecord;
uses crt;

const
N = 8;
type Price = record
title:string;
vendor:string;
priceRU:real;
end;
var
priceFile : file of Price;
choise, sc, i, k:integer;
exit, error, infoReady, searching, found:boolean;
priceArray: array[1..N] of Price;
searchTitle, filepath:string;
aux: Price;

procedure new_info_input;
begin
for i:=1 to N do begin
with priceArray[i] do begin
write('Enter the title of goods: ');
readln(title);
write('Specify the vendor: ');
readln(vendor);
write('Enter the price in RU: ');
readln(priceRU);
end;
end;
for i:=2 to N do begin
for k:=i-1 downto 1 do begin
if priceArray[k+1].title < priceArray[k].title then begin
aux := priceArray[k];
priceArray[k] := priceArray[k+1];
priceArray[k+1] := aux;
end
else break;
end;
end;
end;

procedure save_to_file(filepath:string);
begin
assign(priceFile, filepath);
rewrite(priceFile);
for i:=1 to N do
write(priceFile, priceArray[i]);
close(priceFile);
end;

procedure search_once;
begin
found := false;
write('Specify the title of goods you want to search for: ');
readln(searchTitle);
for i:=1 to N do begin
if priceArray[i].title = searchTitle then begin
writeln('Additional info found:');
write('Title: ');
writeln(searchTitle);
write('Vendor: ');
writeln(priceArray[i].vendor);
write('Price in RU: ');
writeln(priceArray[i].priceRU);
found := true;
break;
end;
end;
if found = false then writeln('404 - Not Found');
write('Would you like to search once again? 1 - Yes. 2 - Exit: ');
readln(sc);
if sc = 2 then searching := false;
end;

begin
exit := false;
infoReady := false;
clrscr;
while not exit do begin
writeln('1. Enter new information');
writeln('2. Search for specific goods');
writeln('3. Save info to file');
writeln('4. Exit');
write('Make your choise: ');
readln(choise);
case choise of
1: begin
new_info_input;
infoReady := true;
end;
2: begin
searching := true;

if not infoReady then writeln('Please enter the information first.')
else while searching do
search_once;
end;
3: begin
if not infoReady then writeln('Please enter the information first.')
else begin
write('Specify full filepath: ');
readln(filepath);
save_to_file(filepath);
writeln('Save successful.');
end;
end;
4: begin
exit := true;
end;
5: for i:=1 to N do begin
writeln(priceArray[i].title);
end;
end
end;
end.



Прога то есть, но вот что то она работает не очень...проблема с выводом цены и записью в файл. + Как я понимаю неправльно выполнены процедуры: например procedure new_info_input... вроде как в процедуре должна осуществляться передача пааметров по значению, адресу и т. д. а у меня такого нету, следовательно в программе присутствуют глобальные переменные.

Автор: Lapp 5.10.2007 16:19

Напиши конкретно, что она должна делать ( по замыслу), но не делает, и что делает вместо этого. Попробуй упростить ситуацию, минимизировать ввод. Если ты чувствуешь, что ошибка в некоторм конкретном месте, попробуй сделать мини-вариант программы, в котором только это место (или почти только). Выложи это здесь, если все же не сможешь разобраться.
Успехов!

Автор: -slava- 7.10.2007 19:49

Цитата
запись массива в файл под заданным с клавиатуры именем.


Файл создаёт, но если его открыть, то массивом в нём и не ппахнет
И ещё, когда вводишш цену товара, а потом вызываешь информацию о нем, то если цена была допустим 20 рублей, то он пишет: 2.000000+0.1Е

Автор: мисс_граффити 7.10.2007 21:40

Цитата(-slava- @ 7.10.2007 16:49) *

Файл создаёт, но если его открыть, то массивом в нём и не ппахнет
И ещё, когда вводишш цену товара, а потом вызываешь информацию о нем, то если цена была допустим 20 рублей, то он пишет: 2.000000+0.1Е

1. Открываешь - чем? Блокнотом? Или из паскаля?
2. Все правильно smile.gif Просто надо сделать так: вместо write(a) написать, например, write(a:5:2)