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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2008, 23:59   #1
Алина-малина
 
Аватар для Алина-малина
 
Регистрация: 30.10.2008
Сообщений: 3
По умолчанию Паскаль, файл с данными

Пожайлуста помогите, думаю несложно, хотя я все равно не могу)) Составила лишь вспомогательную, и то незнаю правильно или нет)

Дан файл f, содержащий сведения об игрушках: указывается название игрушки (н-р кукла, кубики, мяч, конструктор и т.д.), ее стоимость и возрастные границы детей, для которых игрушка предназначена (н-р для детей от 2-х до 5 лет)
Получить следующие сведения: Можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3-х лет, и дополнительно мяч так, что бы суммарная стоимость игрушек не превосходила 100р

ВОт мое начало))

Код:
Program vspom;
type igryshki = RECORD
NAZVANIE: string[20];
Stoimost: 10..200;
Vgranicy: string[10];- или здесь как-то иначе? 
end;
VAR f:file of igryshki; a:igryshki; i,n:byte;
Begin
     Assign (f,'C:\123.dat');
     Rewrite (f);
     write ('vvedite n='); readln (n);
     For i:=1 to n do begin
     write ('vvedi Nazvanie='); readln (a.NAZVANIE);
     write ('vvedi stoimost='); readln (a.stoimost);
     write ('vvedi Vgranicy='); readln (a.Vgranicy);
     write (f,a);
     end;
     close(f);
     end.

Последний раз редактировалось Алина-малина; 21.11.2008 в 00:22. Причина: оформила прогу в виде кода чтоб было красиво))
Алина-малина вне форума Ответить с цитированием
Старый 21.11.2008, 00:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну допустим файл уже набит тогда примерно так:
Код:
Reset (f);
while not eof(f) begin read(f,a);
if (a.NAZVANIE<>'Мяч')and(a.stoimost+Stoim_macha<=100)and(a.vgranicy=3) then begin
 write ('Nazvanie=',a.NAZVANIE);
 write ('stoimost=',a.stoimost);
end;
end;
close(f);
А до этого ты в переменку Stoim_macha должна пихнуть стоимость мяча.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2008, 09:01   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Я так понимаю, что файла такого еще нет, поскольку он типизированный (кто ж Вам его сделает) и его надо создать.
Код:
uses crt;
type Tigr=record  // не люблю длинных имен идентификаторов
          naz:string[20];
          stm:10..200;
          vz_min,vz_max:1..12;//нижняя и верхняя границы
          end;
var sp:array[0..100]of Tigr;
    f:file of Tigr;
    st_m:10..200;
    n,i,k:integer;
    c:char;
begin
clrscr;
assign(f,'123');
rewrite(f);
n:=0;
repeat
writeln('Игрушка ',n+1);  //заполняем массив записей
write('Название: ');readln(sp[n].naz); //обязательно включите мяч
write('Стоимость: ');readln(sp[n].stm);
write('Минимальный возраст: ');readln(sp[n].vz_min);
write('Максимальный возраст: ');readln(sp[n].vz_max);
write(f,sp[n]);  //записываем в файл
c:=readkey; //два раза Enter, если продолжаем
n:=n+1;
until c=#27; // Esc и Enter если заканчиваем ввод
clrscr;
reset(f);
n:=0;k:=0;
while not eof(f) do
   begin
    read(f,sp[n]); //читаем очередную запись
    if sp[n].naz='мяч'then st_m:=sp[n].stm;  //запоминаем стоимость мяча
    if (sp[n].vz_min<=3)and(sp[n].vz_max>=3)and(sp[n].naz<>'мяч') //если выполняются все условия
    and(sp[n].stm+st_m<=100) then
       begin
         writeln(sp[n].naz,' cтоимость ',sp[n].stm,' от ',sp[n].vz_min,' до ',sp[n].vz_max);//выводим сведения о игрушке
         k:=1;  //фиксируем совпадение
       end;
   end;
if k=0 then write('Такой игрушки нет!'); //если совпадений нет, сообщаем
close(f);
readln
end.
puporev вне форума Ответить с цитированием
Старый 21.11.2008, 10:56   #4
Алина-малина
 
Аватар для Алина-малина
 
Регистрация: 30.10.2008
Сообщений: 3
По умолчанию

Stilet, puporev большое спасибо)) оч помогли)) чмок вас)
и еще вопросик по 2решению этой задачи?

c:=readkey;
n:=n+1;
until c=#27; что делают каждая из строк? readkey #27 ?
Алина-малина вне форума Ответить с цитированием
Старый 21.11.2008, 10:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

c:=readkey; Ждем нажатия клавиши на клаве и сохраняем ее код с переменку
n:=n+1; Инкремент
until c=#27; Пока то чего мы нажали не станет равно 27, а это код клавиши ЕSCAPE мы крутимси в цикле
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2008, 11:02   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Переменная с считывает символьное представление кода нажатой клавиши. Когда мы нажимаем клавишу Esc, то переменная с считывает это и передает оператору until сообщение, что пора завязывать с вводом и после нажатия клавишы Enter программа выходит из цикла ввода данных и переходит к выполнению следующих операторов.
puporev вне форума Ответить с цитированием
Старый 13.12.2008, 14:59   #7
RUSLAN13
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 10
По умолчанию

у меня похожая задача!=) только надо вывести названия наиболее дорогих игрушек(цена которых отличается от цены самой дорогой игрушки не более чем на 1 рубль) помогите пожайлуста
RUSLAN13 вне форума Ответить с цитированием
Старый 13.12.2008, 16:03   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Похожая да не совсем. У тебя сначала надо найти стоимость самой дорогой игрушки, это как максимум в массиве, только массив у тебя из записей, а потом читать из ыфайла записи и если max-sp[i].stm<=1 then
writeln(sp[i].naz);
puporev вне форума Ответить с цитированием
Старый 13.12.2008, 21:07   #9
RUSLAN13
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 10
По умолчанию

вот я составил, но не работает? Подскажите в чем ошибка?

Begin assign(f,'H:/RGR3.dat');Reset(f);
writeln('spisok_samyh_dorogih_igrus hek');
while not EOF(f) do begin
read(f,a);a.stoim_t:=max;
If a.stoim_t>max then a.stoim_t:=max;
If (max-a.stoim_t)<=100 then writeln(a.nazv_e);
end;
End.
RUSLAN13 вне форума Ответить с цитированием
Старый 13.12.2008, 21:16   #10
RUSLAN13
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 10
По умолчанию

P.S. 100 потому что цена в копейках
RUSLAN13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
непонятки с данными KiSH333 БД в Delphi 5 01.09.2008 08:36
Файл с данными werser БД в Delphi 1 24.05.2008 23:40
Как сохранять bmp картинки в файл с данными andrey4623 Мультимедиа в Delphi 2 25.06.2007 08:36
Как вытащить данные из Excel в бд dephi, а потом (после работы с данными) сформировать новый файл excel. Геля БД в Delphi 1 10.04.2007 15:11