![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Анна |
![]() ![]()
Сообщение
#1
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Создать компонентный файл реализующий базу данных "записная книжка", которая состоит из след. полей: имя, фамилия, отчество, дата рождения, город, улица, дом, квартира, телефон.
Программа должна обеспечивать вввод записи с клавиатуры, а также сортировки записи по полю (отсортированную базу сохранить в другом файле) Сортировка по фамилии. Вот что получилось: Program Lab11; Не получается отсортировать, да и мне кажется, что моя программа слишком громоздкая ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Анна, смотри аттач
![]() Прикрепленные файлы ![]() |
Анна |
![]()
Сообщение
#4
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
To: volvo
Спасибо! Просто у самой пока времени не было, не успела зайти по твоей ссылке на FAQ. |
Анна |
![]()
Сообщение
#5
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
To: volvo
Выдаёт ошибку при открытии результирующего файла. Исправила begin Вместо rewrite(rf) было просто rewrite(f) ... Ещё такой вопрос. В файле кириллица не отображается. Это исправить можно? И можно ли дублировать вывод данных на экран? пробовала просто write (mass[g]) - ругается. |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Анна, это - типизированный файл, а не текстовый... Чтобы его отобразить - надо прочитать его содержимое... Блокнот и ему подобные программы будут показывать неправильную информацию...
Цитата И можно ли дублировать вывод данных на экран? Ну, для этого же специально я написал: for g := 1 to i do begin |
Анна |
![]()
Сообщение
#7
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Я имела ввиду уже отсортированные данные
![]() Сообщение отредактировано: Анна - 9.12.2005 15:34 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Я тоже... Этот фрагмент идет после
QuickSort(mass, 1, i);, значит данные уже отсортированы... |
Анна |
![]()
Сообщение
#9
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Всё, разобралась!
Цитата(volvo) значит данные уже отсортированы... Необязательно. Просто нужно было убрать clrscr;после QuickSort(mass, 1, i); Он просто стирал с экрана отсортированные данные, я так поняла. |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Анна, не путай... ClrScr стоит ПЕРЕД выводом на экран и в файл, т.е. ничего затирать физически не может (если, конечно, ты не подправляла программу... А уж если ты ее исправила, то извините, этот разговор вообще лишен смысла.)
|
Анна |
![]()
Сообщение
#11
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
To: volvo
Абсолютно ничего не исправляла. Попробуй сам убрать clrscr и проверить ... |
Анна |
![]() ![]()
Сообщение
#12
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Небольшие изменения:
Немного запуталась в программе... Код Program Lab11; uses crt; const max = 30; type base = record name, family, otchestvo, data, city, street: string[50]; dom, kv, tel: integer; end; List = array[1 .. max] of base; procedure ReadInfo(var r: base); begin write('Имя:'); readln(r.name); write('Фамилия:'); readln(r.family); write('Отчество:'); readln(r.otchestvo); write('Дата рождения:'); readln(r.data); write('Город:'); readln(r.city); write('Улица:'); readln(r.street); write('Дом:'); readln(r.dom); write('Квартира:'); readln(r.kv); write('Телефон:'); readln(r.tel); end; procedure WriteInfo(r: base); begin writeln('Имя: ' , r.name); writeln('Фамилия: ', r.family); writeln('Отчество: ', r.otchestvo); writeln('Дата рождения: ', r.data); writeln('Город: ', r.city); writeln('Улица: ', r.street); writeln('Дом: ', r.dom); writeln('Квартира: ', r.kv); writeln('Телефон: ', r.tel); end; {Если длина строки 1 больше длины 2 строки, то сдвигаем 1 строку вперёд на 1 ? и т.п.} function Compare (T1, T2: base): integer; begin if length (T1.family) > length (T2.family) then Compare := 1 else if length (T1.family) = length (T2.family) then Compare := 0 else Compare := -1 end; {А дальше я совсем запуталась ...} procedure QuickSort (var A: List; Lo, Hi: Integer); var i,j: integer; x, y: base; procedure Sort (l, r: Integer); begin repeat x := A[(l+r) shr 1]; i := l; j := r; repeat while Compare( A[i], x ) < 0 do inc(i); while Compare( A[j], x ) > 0 do dec(j); if i <= j then begin y := A[i]; A[i] := A[j]; A[j] := y; inc(i); dec(j); end; until i > j; if l < j then Sort (l, j); l := i; until l >= r; end; begin Sort (Lo,Hi); end; var mass: List; filename: string; f, rf: file of base; i, j, k, g:integer; key: char; proverka:boolean; begin clrscr; write('Введите имя исх файла: '); readln(filename); assign(f, filename); rewrite(f); write('Введите имя рез файла: '); readln(filename); assign(rf, filename); rewrite(rf); g := 0; repeat inc(g); ReadInfo(mass[g]); write(f, mass[g]); writeln('Выход ESC'); writeln('Для продолжения нажмите любую клавишу'); writeln; key := readkey; until key = #27; reset(f); i := 0; while not eof(f) do begin inc(i); read(f, mass[i]); end; {сортировка ...} QuickSort(mass, 1, i); { clrscr;} writeln('Отcортированные данные: '); for g := 1 to i do begin writeln; WriteInfo(mass[g]); write(rf, mass[g]); end; writeln; writeln('Нажмите любую кнопку!'); readln; close(rf); close(f); end. Сообщение отредактировано: Анна - 11.12.2005 15:45 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Анна,
погоди, а почему ты делаешь так: { Если длина строки 1 больше длины 2 строки,? Ты не длины строк должна сравнивать, чтобы отсортировать базу по фамилиям (по алфавиту), а сами строки... Или задание поменялось? Если функцию Compare оставить в таком виде, то например при фамилиях Иванова, Петров, Сидорова они будут отсортированы так: Петров, Иванова, Сидорова хотя правильно было бы (по алфавиту) - так, как они перечислены в начале... |
Анна |
![]() ![]()
Сообщение
#14
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
volvo, ага, всё поняла ..
Вот мой метод сортировки (пузырьком): Program Lab11; Можете мне как бы попонятней объяснить вот этот кусок программы (просто смотрела по учебнику, поняла неочень ![]() for i:=2 to g do |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
{ P.S. Пузырек - ОЧЕНЬ медленный способ сортировки... Кстати, опять же вопрос - что будет, если заданы такие данные: Соколов, Смирнов, Семенов ? Что будет после того, как отработает твой алгоритм? |
Анна |
![]()
Сообщение
#16
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
volvo, поставил в тупик. Но нам сказали делать пузырьком или другими методами, которые мы проходили, сортировка вставками, выбором элементов, раздления ... а такой сортировки, какую представил ты, мы не проходили
![]() Сейчас ещё попробуй другими методами сделать .. |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
for i:=2 to g do А вот это какой метод по-твоему? Не пузырек? Но это будет нормально сортировать, т.к. сравниваются не только первые, но и все остальные символы ![]() |
Анна |
![]()
Сообщение
#18
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
volvo, не поверишь, сама сейчас до этого догадалась .. думаю, зачем эта единица нужна ...
![]() PS Всё-таки, ещё хочу попробовать сделать другими методами ... ![]() |
Анна |
![]()
Сообщение
#19
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
ну что я могу сказать ...
да вот: for i:=1 to g-1 do begin Метод простого выбора, аднака ![]() |
Анна |
![]()
Сообщение
#20
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
end; Как сделать, чтоб после сортировки, на экран выводилось определённое поле записи, к примеру отчество из второй записи .. ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 23:30 |