IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Типизированные файлы
Hardip
сообщение 29.11.2010 22:56
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Вот думаю над задачей, даже похожая есть.. Дан файл содержащий сведения о книгах: фамилия автора, название, год издания, цена книги.
Как вывести на экран книгу с заданным годом издания (нужно указать в write), упорядоченные по алфавиту, а если таковых нет, то выдать соответствующее сообщение; а так же отсортировать записи в порядке возрастания цены книги.
Файл, я сделал, прикладываю. Если кто-то поможет буду благодраен. Видел похожую программу, но не могу сделать под себя..
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
qwe=record
fio,db:string;
a,b,c:byte;
end;
rty=record
a:real;
b:integer;
end;
const
n=10;
var
d:array[1..n]of qwe;
e:array[1..n]of rty;
f:text;
i,j,x,y:integer;
s:string;
begin
i:=1;
assign(f,'school');
reset(f);
while not(eof(f)) do begin
  readln(f,d[i].fio);
  readln(f,d[i].db);
  readln(f,d[i].a,d[i].b,d[i].c);
  i:=i+1;
end;
for i:=1 to n do begin
  e[i].a:=(d[i].a+d[i].b+d[i].c)/3;
  e[i].b:=i;
end;
for i := n downto 2 do
        for j := 2 to i do
          if e[j].a < e[j - 1].a then
            begin
              x := Round(e[j].a);
              y:=e[j].b;
              e[j].a := e[j - 1].a;
              e[j].b := e[j - 1].b;
              e[j - 1].a := x;
              e[j - 1].b := y;
            end;
for i:=1 to n do
  writeln(d[e[i].b].fio,': ',e[i].a);
writeln('Vvdeite FIO');
readln(s);
for i:=1 to n do if d[i].fio=s then
  writeln('FIO: ',d[i].fio,', DR: ',d[i].db,', Osenki: ',d[i].a:2,d[i].b:2,d[i].c:2);
writeln('Srednie ball menishe treh:');
for i:=1 to n do if e[i].a<=3 then writeln(d[e[i].b].fio,': ',e[i].a);
readln;
end.



Она делат вот что - Дан файл в котором содержится информация о школьниках:
1) Ф.И.О.
2) год рождения, месяц, число
3) оценки экзаменов
а) отсортировать записи по возрастанию среднего
экзаменационного балла;
б) по запросу по Ф.И.О. - выдать средний балл;
в) распечатать ведомость школьников со средним баллом
меньше 3.



Прикрепленные файлы
Прикрепленный файл  knig.txt ( 115 байт ) Кол-во скачиваний: 227
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 30.11.2010 14:20
Сообщение #2


Гость






const
MaxSize = 10;

type
R = record
FIO: string;
Title: string;
Year: integer;
Price: double;
end;

procedure ReadRec(var f: text; var Rec: R);
begin
with Rec do
begin
readln(f, FIO);
readln(f, Title);
readln(f, Year);
readln(f, Price);
end;
end;
procedure WriteRec(const Rec: R);
begin
with Rec do
writeln(FIO: 20, Title:20, Year:8, Price:8 :2);
end;

procedure Sort(var ar: array of R; n: integer);
var
i, j, k: integer;
Temp: R;
begin
For i := 1 To Pred(n) do
Begin
k := i; Temp := ar[i - 1];
For j := Succ(i) To n Do
If Temp.Title > ar[j - 1].Title Then
Begin
k := j; Temp := ar[j - 1]
End;
ar[k - 1] := ar[i - 1];
ar[i - 1] := Temp
End;
end;

var
f: text;
arr: array[1 .. MaxSize] of R;
MyRec: R;
i, n, Yr: integer;
found: boolean;

begin
writeln('Year = '); readln(Yr);

assign(f, 'data.txt');
reset(f);

n := 0;
while not eof(f) do
begin
ReadRec(f, MyRec);
if MyRec.Year = Yr then
begin
inc(n);
arr[n] := MyRec;
end;
end;
close(f);

if n > 1 then
sort(arr, n);

if n > 0 then
for i := 1 to n do WriteRec(arr[i])
else
writeln('no matches');

end.


Только не надо повторения истории с Сурсов... Я СПЕЦИАЛЬНО поставил здесь FPC, и проверил обе программы. dry.gif
 К началу страницы 
+ Ответить 
Hardip
сообщение 30.11.2010 15:59
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Спасибо Вам большое!! А сортировка
Код
procedure Sort(var ar: array of R; n: integer);

это "книга с заданным годом издания" ? А отсортировать записи в порядке возрастания цены книги, я что-то искал-искал - не нашёл - ?
Код
begin
    ReadRec(f, MyRec);
    if MyRec.Year = Yr then
    begin
      inc(n);
      arr[n] := MyRec;
    end;
  end;


Сообщение отредактировано: Hardip - 30.11.2010 16:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"