![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
-ZoLToN- |
![]() ![]()
Сообщение
#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 Проблема в том что программа не может получить данные из файла. Используя режим просмотра стека я выяснил, что файл нормально открывается для чтения, но данные из этого файла не передаются в структуру. Заранее благодарен за любую помощь или советы! ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
У тебя в программе не хватает ОДНОГО пробела !!!
![]() Function ReadData(var Rec:TDATA):integer; Добавь его, и все будет работать... ![]() |
Гость |
![]()
Сообщение
#3
|
Гость ![]() |
Спасибо огромное за помощь =)
Можно я задам еще несколько вопросов чтобы не плодить топики?: - Как сделать чтобы выводились например первые 5 знаков? (Например чтобы было не 15000...000Е+04, а 15000). - На сколько мне известно аски коды заглавных и строчных русских сумволов с а по п различаются на 32(?), а с р по я на 87(?). Какими функциями переводить из аски кодов туда и обратно? Какой промежуток аски кодов русских букв и идут ли они подряд? - Работают ли в Паскале относительные пути? Мне необходимо следующее: 1. Вводить имя файла без расширения. 2. Формировать путь к файлу. Т.к. заранее сказано что файл текстовый, то сделать первое понятно как. А вот со вторым возникают некоторые сложности. Можно каким-нибудь способом получить имя текущей папки? Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(Гость @ 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; Цитата(Гость @ 8.03.2006 17:42) Какой промежуток аски кодов русских букв и идут ли они подряд? Нет. Между 'п' и 'р' есть разрыв...Цитата(Гость @ 8.03.2006 17:42) Можно каким-нибудь способом получить имя текущей папки? Легко:Uses Dos; Цитата(Гость @ 8.03.2006 17:42) Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную. Ты расскажи, ДЛЯ ЧЕГО это тебе понадобилось? Вообще-то есть и ChDir тоже, в принципе должно работать, но может быть есть более красивый способ, для этого надо знать цель... |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Спасибо за помощь. Для меня это имеет прямую практическую ценность. Меня из инста отчислят если я не сделаю все лабы
![]() Программа должна выполнять следующие функции: 1. Вводить имя файла без расширения. 2. Формировать путь к файлу. 3. Проверять правильность открытия файла 4. Читать данные из текстового файла. 5. Проверять прочитанные данные и исправлять ошибки в них. 6. Записывать исправленные данные в новый файл. 7. Выводить на экран информацию: • о разработчике программы; • задание на лабораторную работу; • запрос на ввод имени файла; • исправленные данные. Программа нужна для обучения основам работы со списками и файлами. =)) |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 3:38 |