Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2012, 09:09   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию Ошибка в коде (Delphi)

Всем доброго времени суток! Помогите пожалуйста исправить ошибку, первая и вторая процедура работают, а вот последняя процедура почему не работает не пойму.

Условие задачи.
{Создать массив - телефонный справочник, хранящий информацию о 15 абонентах сотовой сети. Каждый элемент справочника хранит следующую информацию об абоненте: ФИО, номер телефона, адрес регистрации, состояние баланса.

Упорядочить массив по ФИО абонентов. Проверить есть ли абоненты, имеющие несколько номеров. Уникальность абонента определяется его ФИО и адресом регистрации.}

Код:
program Phonebookk;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;

type
  Phonebook = record
    SNP: string[30];
    Phone: string[15];
    balance: real;
    Address: string[50]
  end;

  mas = array[1..15] of Phonebook;

const
  n = 5;

procedure Vvod(var a: mas);
var
  i: integer;
begin
  writeln('Input data:');
  for i := 1 to n do
  begin
    write('First name of ', i, ' client: ');
    readln(a[i].SNP);
    write('Telephone number of ', i, ' client: ');
    readln(a[i].Phone);
    write('Balance of ', i, ' client: ');
    readln(a[i].balance);
    write('Address of ', i, ' client: ');
    readln(a[i].Address);
  end
end;

//Процедура упорядочивания массива по ФИО абонентов.

procedure Sort_SNP(var a: mas);
var
  i, j: integer;
  x: Phonebook;
begin
  for i := 1 to n - 1 do
    for j := i + 1 to n do
      if a[i].SNP > a[j].SNP then
      begin
        x := a[i];
        a[i] := a[j];
        a[j] := x
      end;
  writeln('Clients are sorted in alphabetical order:');
  for i := 1 to n do
    writeln(a[i].SNP {,' ',a[i].Phone,' ',a[i].Phone2,' ',a[i].Address});
end;

//Процедура, которая проверяет есть ли абоненты, имеющие несколько номеров.

procedure SomePhone(a: mas);
var
  i, b, e: integer;
begin
  b := 1;
  e := 1;
  while (b <= n)and(e<=n) do
  begin
    while (b <= n)and(e<=n) and (a[b].SNP = a[e].SNP) and (a[b].Address = a[e].Address) do
      inc(e);
    if e - b > 1 then
      writeln('Client ', a[b].SNP, ' have ', e - b, ' phone numbers');
    b := e;
    inc(e);
  end;
end;

var
  a: mas;
begin
  Vvod(a);
  Sort_SNP(a);
  SomePhone(a);
  readln;
end.
Начинающий програм вне форума Ответить с цитированием
Старый 07.04.2012, 09:41   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Что именно не работает?
(Кстати, могли продолжить спрашивать в прошлой теме)
Процедура SomePhone должна вызываться строго после сортировки.
Если она будет вызвана без сортировки, то ее поведение непредсказуемо.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.04.2012, 09:32   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

При выполнении программы эта процедура не запускается, почему не пойму.
Начинающий програм вне форума Ответить с цитированием
Старый 08.04.2012, 09:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Проверил твой код - все ок:
Код:
Input data:
First name of 1 client: 0
Telephone number of 1 client: 0
Balance of 1 client: 0
Address of 1 client: 0
First name of 2 client: 0
Telephone number of 2 client: 0
Balance of 2 client: 0
Address of 2 client: 0
First name of 3 client: 0
Telephone number of 3 client: 0
Balance of 3 client: 0
Address of 3 client: 0
First name of 4 client: 0
Telephone number of 4 client: 0
Balance of 4 client: 0
Address of 4 client: 0
First name of 5 client: 0
Telephone number of 5 client: 0
Balance of 5 client: 0
Address of 5 client: 0
Clients are sorted in alphabetical order:
0
0
0
0
0
Client 0 have 5 phone numbers
Все процедуры отрабатывают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.04.2012, 10:57   #5
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Да я уже понял
Начинающий програм вне форума Ответить с цитированием
Старый 08.04.2012, 13:12   #6
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

Код:
procedure Sort_SNP(var a: mas);
var
  i, j: integer;
  x: Phonebook;
begin
  for i := 1 to n - 1 do
    for j := i + 1 to n do
      if a[i].SNP > a[j].SNP then
      begin
        x := a[i];
        a[i] := a[j];
        a[j] := x
      end;
  writeln('Clients are sorted in alphabetical order:');
  for i := 1 to n do
    writeln(a[i].SNP {,' ',a[i].Phone,' ',a[i].Phone2,' ',a[i].Address});
end;
Делфи не может сравнивать строки ( a[i].SNP )
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 08.04.2012, 13:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Делфи не может сравнивать строки
Кто сказал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи: ошибка в коде (Delphi) Начинающий програм Помощь студентам 2 06.04.2012 01:10
Ошибка в коде Delphi Начинающий програм Помощь студентам 6 06.02.2012 19:52
В коде ошибка (Delphi). Начинающий програм Помощь студентам 0 08.12.2011 19:58
Ошибка в коде программы Delphi Начинающий програм Помощь студентам 5 07.12.2011 23:46
Ошибка в коде программы (Delphi) Начинающий програм Помощь студентам 4 03.12.2011 22:28