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

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

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

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


Пионер
**

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

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


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


Гость






smile.gif спасибо большое! Так и надо было, чтобы писалось rewrite!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

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

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


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


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


Пионер
**

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

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


О! теперь нормально! Спасибо огромное... Но вот насчет Zarplata rabotnika nizhe srednei - это так и остается в самом конце, и ниче не выводится!... я не знаю, что надо исправить.....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


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


Пионер
**

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

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


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


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

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

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


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


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


Пионер
**

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

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


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

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


Да, вводить самой данные нельзя (так сказал препод)... значит надо 1 раз его заполнить, и работать с ним! А как вот это сделать, не могу сообразить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

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

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


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


Пионер
**

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

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


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


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

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

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


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

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

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


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


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

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

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


assign(r,'anketa.dat'); 

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


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

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

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

 





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