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

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

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

> Записи, помогите подкорректировать...
Светлана
сообщение 14.12.2006 23:41
Сообщение #1


Пионер
**

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

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


Здравствуйте! У меня 2 задачки по записям... Помогите пож-та немного исправить...
1) Среди работников данного предприятия найти тех, чья заработная плата за месяц является ниже средней по предприятию, а также распечатать список тех, кто проработал на предприятии более 10 лет с указанием их фамилии, зарплаты, стажа работы и должности.
Вот мой вариант решения...
Program Zapisi_7;
type
rabotnik_predpriyatiya=record
stazh:integer;
zar:integer;
fam:string[15];
dolzh:string[10];
end;
var
i,n: integer;
anketa: rabotnik_predpriyatiya;
r: file of rabotnik_predpriyatiya;
begin
assign(r,'anketa.dat'); reset( r ); { -> вот тут у меня высвечивается ошибка: File not found }
write('Skolko dannyh vvodit');
readln(n);
for i:=1 to n do
begin
write('Vvedite familiu');
readln(anketa.fam);
write('Vvedite stazh raboty');
readln(anketa.stazh);
write('Vvedite velichinu mes. zarabotka');
readln(anketa.zar);
write('Vvedite dolzhnost');
readln(anketa.dolzh);
write(r,anketa);
end;
close( r );
end.

Как в этой проге написать, чья зар. плата за месяц явл. ниже средней по предприятию???И как вывести фамилии тех, кто проработал более 10 лет? Помогите пож-та...

2) Распечатать фамилии тех учеников класса, которые являются хорошистами и отличниками по итогам года. Также узнать, насколько их средний балл отличается от среднего балла класса.
Program Zapisi_12;
type uchenik=record
fam:string[15];
ucheb_god:integer;
har:string[20];
end;
var a:array[1..10] of uchenik;
fin,fout:text;
i,j:integer;
begin
assign(fin,'uch.pas');
reset(fin); { -> тут опять эта же ошибка: File not found }
i:=0;
repeat
i:=i+1;
with a[i] do
readln(fin,fam,ucheb_god,har);
until eof(fin);
close(fin);
assign(fout,'hor_i_otl.pas');
rewrite(fout);
for j:=1 to i do
if a[i].har='horoshisty i otlichniki' then
writeln(fout,a[i].fam);
close(fout);
end.

И я не знаю как сравнить эти средние баллы...

Заранее большое спасибо за помощь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
klem4
сообщение 14.12.2006 23:53
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


начнем с начала ...

Цитата
assign(r,'anketa.dat'); reset®; { -> вот тут у меня высвечивается ошибка: File not found }


Потому что ты пытаешь открыть несуществующий (пока) файл для чтения, а хочешь, видимо для записи (rewrite а не reset)

Далее после заполнения файла, открываешь его уже для чтения (reset) и считаешь сначала среднюю зарплату, попутно выводя работников со стажем > 10


sr := 0;

reset(f);

while not(eof(f)) do begin

read(f, anketa);

sr := sr + anketa.zar;

if anketa.stazh > 10 then begin
// выводишь нужные данные по работнику (anketa.fam например)
end;

end;

sr := sr / FileSize(f);
(* на всякий случай можно проверить не равно ли FileSize(f) == 0,
FileSize(f) - количество записей в файле *)

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

*)

reset(f);

while not(eof(f)) do begin

read(f, anketa);

if anketa.zar < sr then // зарплата этого работника ниже средней
end;






ps

Записи. Record.
Файлы


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светлана
сообщение 15.12.2006 0:34
Сообщение #3


Пионер
**

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

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


спасибо! Но в примерах, которые нам давали, было сначала assign, а потом сразу шло reset... Вот... может чет я просто не допираю... (извините, а во второй задаче также будет?)....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светик
сообщение 15.12.2006 13:33
Сообщение #4


Гость






smile.gif спасибо большое! Так и надо было, чтобы писалось rewrite!
 К началу страницы 
+ Ответить 
Светлана
сообщение 22.12.2006 8:27
Сообщение #5


Пионер
**

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

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


Вот, я переделала 1-ю задачку, она так то работает, но когда я ввожу все данные, она не выводит никаких данных... может я просто не даю команду для этого? Помогите плиз ошибку найти...


Program Zapisi_7;
type
rabotnik_predpriyatiya=record
stazh:integer;
zar:integer;
fam:string[15];
dolzh:string[10];
end;
var
i,n: integer;
sr:real;
anketa: rabotnik_predpriyatiya;
r: file of rabotnik_predpriyatiya;
begin
assign(r,'anketa.dat');
rewrite®;
write('Skolko dannyh vvodit');
readln(n);
for i:=1 to n do
begin
write('Vvedite familiu');
readln(anketa.fam);
write('Vvedite stazh raboty');
readln(anketa.stazh);
write('Vvedite velichinu mes. zarabotka');
readln(anketa.zar);
write('Vvedite dolzhnost');
readln(anketa.dolzh);
write(r,anketa);
end;
close®;
sr:=0;
reset®;
while not (eof®) do begin
read(r,anketa);
sr:=sr+anketa.zar;
if anketa.stazh>10 then begin
writeln('anketa.fam');
writeln('anketa.zar');
writeln('anketa.stazh');
writeln('anketa.dolzh');
end;
end;
sr:=sr/FileSize®;
reset®;
while not(eof®) do begin
read(r,anketa);
if anketa.zar<sr then writeln ('Zarplata rabotnika nizhe srednei');
end;
end.


заранее большое спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 22.12.2006 8:37
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Попробуй перед последнем end-ом поставить процедуру readln. smile.gif
PS советую при вводе данных вместо write использовать writeln. smile.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светлана
сообщение 22.12.2006 9:12
Сообщение #7


Пионер
**

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

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


Цитата(Bokul @ 22.12.2006 8:37) *

Попробуй перед последнем end-ом поставить процедуру readln. smile.gif
PS советую при вводе данных вместо write использовать writeln. smile.gif


пасиб! У меня стало вот что выводиться!!! Ну я там фамилии, должности и т.д. ввожу, потом выводится
anketa.fam
anketa.zar
anketa.stazh
anketa.dolzh
Zarplata rabotnika nizhe srednei

и все....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 22.12.2006 9:16
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Ну конечно же. smile.gif
вместо
         
writeln('anketa.fam');
writeln('anketa.zar');
writeln('anketa.stazh');
writeln('anketa.dolzh');


поставь
         
writeln(anketa.fam);
writeln(anketa.zar);
writeln(anketa.stazh);
writeln(anketa.dolzh);


wink.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светлана
сообщение 22.12.2006 9:51
Сообщение #9


Пионер
**

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

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


О! теперь нормально! Спасибо огромное... Но вот насчет Zarplata rabotnika nizhe srednei - это так и остается в самом конце, и ниче не выводится!... я не знаю, что надо исправить.....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2006 11:51
Сообщение #10


Гость






А что бы ты хотела, чтобы выводилось? Фамилия работника, у которого зарплата ниже средней? Тогда вот так:
         while not(eof( R )) do begin
read(r, anketa);
if anketa.zar<sr then writeln (anketa.fam, ' : Zarplata rabotnika nizhe srednei');
end;
Или тебе придется сначала пройтись в цикле по файлу для вычисления средней зарплаты, и только потом вообще выводить все данные:

...
sr:=0;
reset( R );
while not eof( R ) do begin
read(R, anketa); sr := sr + anketa.zar;
end;
sr := sr / FileSize( R );

reset( R );
while not eof( R ) do begin
read(r,anketa);
if anketa.stazh>10 then begin
writeln(anketa.fam);
writeln(anketa.zar);
writeln(anketa.stazh);
writeln(anketa.dolzh);
end;

if anketa.zar < sr then writeln (anketa.fam, ': Zarplata rabotnika nizhe srednei');

end;
...
 К началу страницы 
+ Ответить 
Светлана
сообщение 22.12.2006 20:47
Сообщение #11


Пионер
**

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

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


Хорошо, спасибо большое! Так и попробую сделать!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светлана
сообщение 22.12.2006 22:33
Сообщение #12


Пионер
**

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

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


У меня еще вот такой вопрос: мне не надо самой вводить данные!!!! Надо как-то связать это с файлом!!! Как это сделать? Подскажите пож-та.... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.12.2006 22:37
Сообщение #13


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

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

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


А в файле они откуда должны браться?
Или ты хочешь один раз заполнить, а потом работать с готовым?


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


Пионер
**

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

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


Цитата(мисс_граффити @ 22.12.2006 22:37) *

А в файле они откуда должны браться?
Или ты хочешь один раз заполнить, а потом работать с готовым?


Да, вводить самой данные нельзя (так сказал препод)... значит надо 1 раз его заполнить, и работать с ним! А как вот это сделать, не могу сообразить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.12.2006 23:10
Сообщение #15


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

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

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


так у тебя половина программы - заполнение, а вторая половина - основная работа.
assign(r,'anketa.dat');
rewrite®; {начало}
write('Skolko dannyh vvodit');
readln(n);
for i:=1 to n do
begin
write('Vvedite familiu');
readln(anketa.fam);
write('Vvedite stazh raboty');
readln(anketa.stazh);
write('Vvedite velichinu mes. zarabotka');
readln(anketa.zar);
write('Vvedite dolzhnost');
readln(anketa.dolzh);
write(r,anketa);
end;
close®;{конец}

вот этот кусок отвечает за заполнение. если ты его уберешь - получишь программку, работающую с готовым файлом.


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


Пионер
**

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

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


спасибки! Так и сделаю!!!! yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Светлана
сообщение 23.12.2006 8:40
Сообщение #17


Пионер
**

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

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


Я удалила выделенную часть, и у меня чет какая-то ошибка выдается: Error 207: Invalid floating point operation. Я ее не могу исправить, потому что курсор не мигает, где есть ошибка... Это значит, что ошибка не в какой-то определенной строке?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Танкистка
сообщение 23.12.2006 10:31
Сообщение #18


Круто!!!!))))
*

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

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


Цитата(Светлана @ 23.12.2006 0:57) *

Да, вводить самой данные нельзя (так сказал препод)... значит надо 1 раз его заполнить, и работать с ним! А как вот это сделать, не могу сообразить...

Надо не через паскаль ввести данные... а непосредственно в сам файл.. т.е. ты создаешь файл на диске и указываешь в проге путь к нему... а файл этот, например блокнот, заполняешь уже сама.. в ручную... т.е. если у тебя фамилия string[15], то ты должна хоть как отвести под нее эти 15 ячеек... и т.д.


--------------------
Времена не выбирают....
В них живут и умирают...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 23.12.2006 10:45
Сообщение #19


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

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

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


assign(r,'anketa.dat'); 

должно остаться! (я тебе поэтому начало и конец отметила)
прикрепи, что получилось...
Танкистка, речь про типизированные файлы. Их все же лучше заполнять не через блокнот (как текстовые). Имхо.


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


Пионер
**

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

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


Цитата(Танкистка @ 23.12.2006 10:31) *

Надо не через паскаль ввести данные... а непосредственно в сам файл.. т.е. ты создаешь файл на диске и указываешь в проге путь к нему... а файл этот, например блокнот, заполняешь уже сама.. в ручную... т.е. если у тебя фамилия string[15], то ты должна хоть как отвести под нее эти 15 ячеек... и т.д.


Ха, привет!!! ТанюХа, молодец!!!!! good.gif Спасибо! То есть я в блокноте пишу эти данные (англ. буквами...) сама, да?


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

assign(r,'anketa.dat'); 

должно остаться! (я тебе поэтому начало и конец отметила)
прикрепи, что получилось...
Танкистка, речь про типизированные файлы. Их все же лучше заполнять не через блокнот (как текстовые). Имхо.


вот то что получилось...

Прикрепленный файл  ZAPIS.PAS ( 876 байт ) Кол-во скачиваний: 401

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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