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

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

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

> Ничего оригинального, тупо ещё одна проблема с прогой).
Jonathan Davis
сообщение 23.12.2006 19:07
Сообщение #1


Гость






Задание: создать файл, содержащий сведения о студентах вашей группы(фамилия, имя, отчество, экзаменационные оценки)
а)упорядочить список студентов по успеваемости
б)подсчитать средний балл в группе
в)посчитать средний балл каждого студента

С б и в нет проблем, проблема с а. Понял, что нужно обращаться не к массиву, а к файлу и использовать один из методов сортировки(после прочтения форума), а реализовать не получается.

program bred;
uses crt;
const
w=2;
n=5;
type
ank=record
fam:string[25];
imya:string[25];
otch:string[30];
ozenki:array [1..n] of integer;
end;
spisok=file of ank;
var
a,b:real;
i,j:integer;
an:ank;
s:spisok;
sbs,sbg:real;
begin
assign(s,'d:\studenti.dat');
rewrite(s);
for i:=1 to w do
begin
with an do
begin
write('Familia '); readln(fam);
write('Imya '); readln(imya);
write('Otchestvo '); readln(otch);
write('Ozenki ');
begin
for j:=1 to n do
read(ozenki[j]);
end;
readln;
end;
write(s,an);
end;
close(s);
reset(s);
for i:=1 to w do
begin
read(s,an);
for j:=1 to n do
a:=a+an.ozenki[j];
end;
sbg:=a/(n*w);
Writeln('Srednii ball v gruppe =',sbg:1:1);
close(s);
reset(s);
for i:=1 to w do
begin
read(s,an);
b:=0;
begin
for j:=1 to n do
b:=b+an.ozenki[j];
end;
sbs:=b/n;
write(s,an);
with an do
writeln(an.fam,' ',an.imya,' ',an.otch,' ','srednii ball = ', sbs:1:1);
end;
close(s);
End.

 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
volvo
сообщение 23.12.2006 19:23
Сообщение #2


Гость






Ты хочешь прямо в файле сортировать данные? Или все-таки прочесть их в массив, отсортировать и сбросить обратно в файл? Первый вариант тоже можно реализовать, но дольше и... Оно надо?
 К началу страницы 
+ Ответить 
Гость
сообщение 23.12.2006 19:28
Сообщение #3


Гость






Цитата(volvo @ 23.12.2006 19:23) *

Ты хочешь прямо в файле сортировать данные? Или все-таки прочесть их в массив, отсортировать и сбросить обратно в файл? Первый вариант тоже можно реализовать, но дольше и... Оно надо?

А я думал в файле быстрей наоборот будет...в массиве я отсортировать без проблем могу, а как обратно сбрасывать???
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 19:41
Сообщение #4


Гость






В файле не может быть быстрей только потому, что скорость операций с памятью гораздо выше скорости операций с файлами...

Цитата
а как обратно сбрасывать
Очень просто:
reset(f); { <--- Сбрасываешь файл-пойнтер в начало файла }
for i := 1 to n do write(f, arr[i]); { n - размер массива }
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 23.12.2006 19:44
Сообщение #5


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата
А я думал в файле быстрей наоборот будет...

Некоторые сортировки (внешние) и на файлах дают неплохие результаты, но скорость доступа к элементам массива несравнимо выше. Обычно сортируют именно файлы, когда они довольно большие и создать такой массив проблематично. И то - иногда просто разбивают их на части, сортируют массивы, а потом делают слияние.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 23.12.2006 19:52
Сообщение #6


Гость






Цитата(volvo @ 23.12.2006 19:41) *

В файле не может быть быстрей только потому, что скорость операций с памятью гораздо выше скорости операций с файлами...

Очень просто:
reset(f); { <--- Сбрасываешь файл-пойнтер в начало файла }
for i := 1 to n do write(f, arr[i]); { n - размер массива }


эт да, но мне потом ещё надо вывести всё красивенько, типа сначала такой то студент с самой хорошей успеваемостью, потом другой, это как осуществить. В файл же запишеться просто упорядоченный массив, никакой привязки к именам студентов не будет...или как?
 К началу страницы 
+ Ответить 
Гость
сообщение 23.12.2006 19:56
Сообщение #7


Гость






Цитата(мисс_граффити @ 23.12.2006 19:44) *

Некоторые сортировки (внешние) и на файлах дают неплохие результаты, но скорость доступа к элементам массива несравнимо выше. Обычно сортируют именно файлы, когда они довольно большие и создать такой массив проблематично. И то - иногда просто разбивают их на части, сортируют массивы, а потом делают слияние.

Да для меня скорость обработки не главное smile.gif , главное чтоб работало).
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 19:58
Сообщение #8


Гость






Ну, перед сбрасыванием в файл пробегись по массиву и посчитай, все что надо... Или уже после сбрасывания отсортированной информации в файл опять переоткрой его и считай любые показатели прямо оттуда...

Цитата
никакой привязки к именам студентов не будет
blink.gif У тебя же файл ЗАПИСЕЙ? А каждая запись содержит фамилию студента, и все данные на него...

Сортировать массив ЗАПИСЕЙ по определенному признаку умеешь?
 К началу страницы 
+ Ответить 
Гость
сообщение 23.12.2006 20:04
Сообщение #9


Гость






Цитата(volvo @ 23.12.2006 19:58) *

Ну, перед сбрасыванием в файл пробегись по массиву и посчитай, все что надо... Или уже после сбрасывания отсортированной информации в файл опять переоткрой его и считай любые показатели прямо оттуда...

Ну я сразу как считаю средний балл студента, записываю его в массив. А мне писать в другой файл или в этот же можна??? Чёт мне кажетсся нельзя мне в этот. Вобще спасибо, что помогаете, не ожидал такого отклика))). smile.gif
Цитата(volvo @ 23.12.2006 19:58) *

blink.gif У тебя же файл ЗАПИСЕЙ? А каждая запись содержит фамилию студента, и все данные на него...

Сортировать массив ЗАПИСЕЙ по определенному признаку умеешь?

Вот тут то моя слабость, насчёт этих записей не представляю, как они работают, мне кажется, отсортирую я массив, запишу в файл, а там тока одни цифры...как связать с именами студентов не понимаю...
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 20:13
Сообщение #10


Гость






Цитата
Ну я сразу как считаю средний балл студента, записываю его в массив.
Аааа... smile.gif Нет, так не пойдет... Тебе надо сортировать именно массив ВСЕХ данных... Как это делается - здесь: Как упорядочить данные по возрастанию?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 23.12.2006 20:14
Сообщение #11


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Можно в этот, но тогда ты потеряешь тот порядок, который был изначально, безвозвратно.
По поводу записей: представь, что держишь в руках анкеты - заполненные листы бумаги. В каждой указаны ФИО и возраст. Ты раскладываешь их по возрасту в порядке убывания. Ведь не отрываешь кусочек, на котором указан возраст, правда? Когда разложишь, связь между фамилией и возрастом сохранится.
То же самое с записями...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 23.12.2006 20:48
Сообщение #12


Новичок
*

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

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


Там возраст уже дан, а мне успеваемость нужно вычислить. Куда мне её сохранять?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 21:04
Сообщение #13


Гость






Да не надо ничего сохранять! Что, нельзя написать еще одну функцию, которая для определенной записи будет "на лету" вычислять успеваемость?
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 23.12.2006 21:06
Сообщение #14


Новичок
*

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

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


Цитата(volvo @ 23.12.2006 21:04) *

Да не надо ничего сохранять! Что, нельзя написать еще одну функцию, которая для определенной записи будет "на лету" вычислять успеваемость?

Наверно можно. Да не обижайтесь, я ж ламер). Чтото мне казалось, что программа значительно легче...

Сообщение отредактировано: Jonathan Davis - 23.12.2006 21:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2006 21:12
Сообщение #15


Гость






Смотри (банальный "пузырек"):
Type
arrType = Array[1 .. n] Of Ank;

Function F(X: Ank): Real;
Begin
{ Здесь вычисляешь "успеваемость" для студента, чья анкета - X }
End;

Procedure Bubble(Var ar: arrType; n: integer);
Var
i, j: Integer;
T: Ank;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If F(ar[Pred(j)]) > F(ar[j]) Then Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;
Если бы ты уточнил, что значит "успеваемость" - я бы написал, КАК именно ее вычислить... Средний балл? Макс. балл? Что-то другое?
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 23.12.2006 21:16
Сообщение #16


Новичок
*

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

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


Цитата(volvo @ 23.12.2006 21:12) *

Смотри (банальный "пузырек"):
Type
arrType = Array[1 .. n] Of Ank;

Function F(X: Ank): Real;
Begin
{ Здесь вычисляешь "успеваемость" для студента, чья анкета - X }
End;

Procedure Bubble(Var ar: arrType; n: integer);
Var
i, j: Integer;
T: Ank;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If F(ar[Pred(j)]) > F(ar[j]) Then Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;
Если бы ты уточнил, что значит "успеваемость" - я бы написал, КАК именно ее вычислить... Средний балл? Макс. балл? Что-то другое?

Мне кажется без разницы...макс балл наверно лучше...млин, впихнул я это в прогу свою...

Сообщение отредактировано: Jonathan Davis - 23.12.2006 21:45
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 24.12.2006 21:25
Сообщение #17


Новичок
*

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

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


Ой, мож кто поможет связать код volvo с моей прогой...Я, конечно, понимаю, что мне и так уже многое размусолили да ещё и задаром, но голова кругом от алгебры(сейчас решал)... wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 11.01.2007 18:51
Сообщение #18


Новичок
*

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

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


Помогите пожалуйста, завтра сдавать(
Как посчитать средний балл???

Сообщение отредактировано: Jonathan Davis - 11.01.2007 19:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.01.2007 19:30
Сообщение #19


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


передаешь функции запись как параметр... а внутри нее считаешь сумму оценок (имена полей ты знаешь) и делишь на количество (его ты тоже знаешь). Этот результат и возращаешь


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jonathan Davis
сообщение 11.01.2007 19:47
Сообщение #20


Новичок
*

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

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


Цитата(мисс_граффити @ 11.01.2007 19:30) *

передаешь функции запись как параметр...

Что вы подразумеваете под понятием параметр?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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