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

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

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

> Занесение из файла в структуру
сообщение
Сообщение #1


Гость






Задание: Из файла занести в структуру данные о работниках и вывести данные о работниках с максимальной зарплатой.
Вот что я сделал:
Код

uses crt;
const
MaxSize=10;
Type
TDATA=record
name:string[80];
salary:real;
end;
var
  DATA:Array[1..maxsize] of TDATA;
  n,i,readresult:integer;
  maxsalary:real;
  f:text;
Function ReadData(var Rec:TDATA):integer;
Var
  s:string[80];
  p,q:integer;
  salaryS:string[10];
  errorcode:integer;
begin
readln(f,s);
if s='' then begin readdata:=-1; q:=-1; end;
p:=pos('',S);
if p=0 then begin Readdata:=1; q:=1; end
else begin
q:=0;
rec.Name:=copy(S,1,p-1);
salaryS:=copy(s,p+1,length(s)-p+1);
val(salaryS,Rec.Salary,Errorcode);
if errorcode<>0 then readdata:=1 else readdata:=0;
end;
end;



begin


clrscr;
assign(f,'LABA2.txt');
reset(f);
readln(f,n);
for i:=2 to n do begin
readresult:=ReadData(data[i]);
end;
maxsalary:=data[1].salary;
for i:=1 to n do begin
if data[i].salary>maxsalary then maxsalary:=data[i].salary;
end;
writeln('Max salary:',maxsalary,' rur.');
for i:=1 to n do begin
if data[i].salary=maxsalary then
writeln(i,') Familiya: ',data[i].name,'Oklad: ',data[i].salary);
end;
close(f);
readkey;
end.

Файл LABA2.txt вида:
8
Фамилия1 10000
Фамилия2 15000
Фамилия3 9000
Фамилия4 7000
Фамилия5 15000
Фамилия6 10000
Фамилия7 5000
Фамилия8 13000

Проблема в том что программа не может получить данные из файла. Используя режим просмотра стека я выяснил, что файл нормально открывается для чтения, но данные из этого файла не передаются в структуру.
Заранее благодарен за любую помощь или советы! unsure.gif
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Спасибо огромное за помощь =)
Можно я задам еще несколько вопросов чтобы не плодить топики?:
- Как сделать чтобы выводились например первые 5 знаков? (Например чтобы было не 15000...000Е+04, а 15000).
- На сколько мне известно аски коды заглавных и строчных русских сумволов с а по п различаются на 32(?), а с р по я на 87(?). Какими функциями переводить из аски кодов туда и обратно? Какой промежуток аски кодов русских букв и идут ли они подряд?
- Работают ли в Паскале относительные пути? Мне необходимо следующее:
1. Вводить имя файла без расширения.
2. Формировать путь к файлу.
Т.к. заранее сказано что файл текстовый, то сделать первое понятно как. А вот со вторым возникают некоторые сложности. Можно каким-нибудь способом получить имя текущей папки? Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(Гость @ 8.03.2006 17:42)
- Как сделать чтобы выводились например первые 5 знаков? (Например чтобы было не 15000...000Е+04, а 15000).
Ну, например, так:
writeln(i,') Familiya: ', data[i].name, ' Oklad: ', data[i].salary:0:0);


Цитата(Гость @ 8.03.2006 17:42)
Какими функциями переводить из аски кодов туда и обратно?

FAQ: Модуль для работы со строками
смотри реализацию
Function StrLower(s: String): String;
Function StrUpper(s: String): String;


Цитата(Гость @ 8.03.2006 17:42)
Какой промежуток аски кодов русских букв и идут ли они подряд?
Нет. Между 'п' и 'р' есть разрыв...

Цитата(Гость @ 8.03.2006 17:42)
Можно каким-нибудь способом получить имя текущей папки?
Легко:
Uses Dos;
var
_Dir: dirstr;
_Name: namestr;
_Ext: extstr;
begin
fsplit(paramstr(0), _Dir, _Name, _Ext);
writeln(_dir);
end.


Цитата(Гость @ 8.03.2006 17:42)
Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную.
Ты расскажи, ДЛЯ ЧЕГО это тебе понадобилось? Вообще-то есть и ChDir тоже, в принципе должно работать, но может быть есть более красивый способ, для этого надо знать цель...
 К началу страницы 
+ Ответить 

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


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

 





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