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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Ничего оригинального, тупо ещё одна проблема с прогой).
сообщение
Сообщение #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


Гость






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


Гость






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

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

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


Гость






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

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


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

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

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


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

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


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


Гость






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

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

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


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


Гость






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

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

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


Гость






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

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

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


Гость






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

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

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

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

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

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


Гость






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


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

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

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


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


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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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

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

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

Сообщение отредактировано: Jonathan Davis -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
Если бы ты уточнил, что значит "успеваемость" - я бы написал, КАК именно ее вычислить... Средний балл? Макс. балл? Что-то другое?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


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


Новичок
*

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

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


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

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


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

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

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


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


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


Новичок
*

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

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


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

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

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

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

 





- Текстовая версия 28.03.2024 17:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name