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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 10:44   #1
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
Вопрос не формируется массив записей

все время пишет что нет жильца с такой фамилией с которой ввожу,не понимаю в чем дело,помогите плиз

В гостинице имеется 15 двухместных номеров. Со¬ставить программу, которая заполняет и данные о жильцах и по фамилии определяет номер, где проживает жилец. Программа запрашивает фамилию жильца.
Если жильца с такой фамилией нет, об этом выдается сообщение.
Если жилец с такой фамилией в гостинице единственный, программа выдает фамилию жильца и номер проживания.
Если в гостинице проживает два или более жильцов с такой фамилией, про¬грамма дополнительно запрашивает инициалы.
При реализации программы использовать массив записей.
Входные данные: строка, в которой через разделитель указаны – номер проживания, фамилии. Символ разделителя слов выбрать самостоятельно.


Код:
program demo;
uses crt;
const
     nmax=30;
type
    persone=record
    fio:string;
    nomer:integer;
    end;
mas=array[1..nmax]of persone;
var
   st:string;
   cod:integer;
   l:integer;
   fam:string;
   i:integer;
   n:integer;
   m:mas;
   f:text;
   nomer:integer;
   procedure zagruzka(var f:text;var n:integer;var m:mas);
   begin
        n:=0;
        while not Eof(f) or (n<nmax) do
        begin
             readln(f,st);
             n:=n+1;
             if n>nmax then
             writeln('massiv zapolnen')
             else
                 begin
                      with m[n] do
                      begin
                           fio:=copy(st,1,pos(' ',st)-1);
                           val(copy(st,pos(' ',st)+1,2),nomer,cod);
                      end;
                 end;
        end;
   end;
        procedure poisk(n:integer;m:mas);
        begin
             l:=0;
             writeln('Vvedite familiu');
             readln(fam);
             with m[n] do
             begin
                  if fam=fio then
                  begin
                       l:=l+1;
                       writeln(l,'.',nomer);
                  end;
             end;
             if l=0 then
             writeln('Takogo jilca net')
             else
             writeln('Naideno',l,'zapisey');
             end;
begin
     assign(f,'t.txt');
     {$I-} reset(f); {$I+}
     if IOresult <>0 then
     begin
          writeln('faila net');
          repeat until keypressed;
          halt end;
zagruzka(f,n,m);
close(f);
writeln('poisk zapisey');
poisk(n,m);
end.

Последний раз редактировалось Stilet; 01.04.2012 в 13:25.
misery24-7 вне форума Ответить с цитированием
Старый 02.04.2012, 06:15   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

КруглосуточноеНесчастье, у тебя две ошибки (больших). Я исправил обе, и снабдил комментами. Разберешься? Задачай вопросы.
Успехов тебе.
Код:
program demo;
uses crt;
const
     nmax=30;
type
    persone=record
    fio:string;
    nomer:integer;
    end;
mas=array[1..nmax]of persone;
var
   st:string;
   cod:integer;
   l:integer;
   fam:string;
   i:integer;
   n:integer;
   m:mas;
   f:text;
   nomer:integer;
   procedure zagruzka(var f:text;var n:integer;var m:mas);
   begin
        n:=0;
        while not Eof(f) and (n<nmax) do     // here, use AND
        begin
             readln(f,st);
             n:=n+1;
             if n>nmax then
             writeln('massiv zapolnen')
             else
                 begin
                      with m[n] do
                      begin
                           fio:=copy(st,1,pos(' ',st)-1);
                           val(copy(st,pos(' ',st)+1,2),nomer,cod);
                      end;
                 end;
        end;
   end;
        procedure poisk(n:integer;m:mas);
        var
          i: integer;                       // announcing i, needed for the loop
        begin
             l:=0;
             writeln('Vvedite familiu');
             readln(fam);
             for i:=1 to n do with m[i] do  // here, use the FOR loop
             begin
                  if fam=fio then
                  begin
                       l:=l+1;
                       writeln(l,'. ',nomer);
                  end;
             end;
             if l=0 then
             writeln('Takogo jilca net')
             else
             writeln('Naideno ',l,' zapisey');
             end;
begin
     assign(f,'t.txt');
     {$I-} reset(f); {$I+}
     if IOresult <>0 then
     begin
          writeln('faila net');
          repeat until keypressed;
          halt end;
zagruzka(f,n,m);
close(f);
writeln('poisk zapisey');
poisk(n,m);
end.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 02.04.2012, 16:10   #3
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

да,уже разобрался сам))забыл цикл написать
а еще необязательно в процедуре "i" обозначать,она у меня и так в основном варе была
но все равно спасибо за помощь)
misery24-7 вне форума Ответить с цитированием
Старый 02.04.2012, 22:43   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от misery24-7 Посмотреть сообщение
да,уже разобрался сам))забыл цикл написать
Молодец )
Цитата:
а еще необязательно в процедуре "i" обозначать,она у меня и так в основном варе была
По-видимому, ты используешь допотопный Turbo Pascal.. Сколько уже можно мучить старую дряхлую лошадь?.. Сжалься, отстрели..
Новый компилятор не даст тебе организовать цикл FOR внутри процедуры на глобальной переменной - и правильно сделает. Это ухудшает внутреннюю структуру программы, а также может быть причиной очень труднонаходимых ошибок (если вызов процедуры попадет в цикл). TP такие вещи не отслеживает, так что старайся делать это сам. Привыкай работать правильно.

Скачай себе FP (freepascal.org), и будет тебе щасьтее.. ))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 03.04.2012, 15:47   #5
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

ок,спасибо за советы)))))
misery24-7 вне форума Ответить с цитированием
Старый 03.04.2012, 22:32   #6
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

а еще не подскажете как сделать так чтобы если два человека в гостинице с одинаковыми фамилиями,программа предлагала бы дополнительно ввести инициалы?
misery24-7 вне форума Ответить с цитированием
Старый 03.04.2012, 22:36   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от misery24-7 Посмотреть сообщение
а еще не подскажете как сделать так чтобы если два человека в гостинице с одинаковыми фамилиями,программа предлагала бы дополнительно ввести инициалы?
Для начала хорошо бы иметь эти самые инициалы в записи. В смысле, предусмотреть для них поле и организовать ввод. Сделай это, дальше посмотрим.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 04.04.2012, 09:10   #8
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

дада,я бы просто так не спрашивал,конечно они у меня есть)))
мне интересно как организовать сканирование на наличие одинаковых элементом массива)

вобще вот мой файл)

zaharova A.A*1
zaharovb A.B*1
zaharovc A.C*2
zaharovd A.D*2
zaharove A.E*3
zaharovf A.F*3
zaharovg A.G*4
zaharovh A.H*4
zaharovi A.I*5
zaharovj A.J*5
zaharovk A.K*6
zaharovl A.L*6
zaharovm A.M*7
zaharovn A.N*7
zaharovo A.O*8
zaharovp A.P*9
zaharovq A.Q*10
zaharovr A.R*10
zaharovs A.S*11
zaharovt A.T*11
zaharovu A.U*12
zaharovv A.V*12
zaharovw A.W*13
zaharovx A.X*13
zaharovy A.Y*14
zaharovz A.Z*14
zaharovaa A.A*15
zaharovbb A.B*15

помогитее!!!!!

Последний раз редактировалось Stilet; 06.04.2012 в 20:31.
misery24-7 вне форума Ответить с цитированием
Старый 06.04.2012, 20:15   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Для начала:
Код:
persone=record
    fio:string;
    inic:string;
    nomer:integer;
    end;
Считывание:
Код:
fio:=copy(st,1,pos(' ',st)-1);
inic:=copy(st,pos(' ',st)+1,3);
val(copy(st,pos('*',st)+1,length(st)-pos('*',st)),nomer,cod);
Поиск:
Код:
procedure poisk(n:integer;m:mas);
var
inics:string;
i:integer;
        begin
             l:=0;
             writeln('Vvedite familiu');
             readln(fam);
			 for i:=1 to n do
			 begin
				with m[i] do
				begin
					if fam=fio then
					begin
                       l:=l+1;
                       writeln(l,'.',nomer);
					end;
				end;
			 end;
             if l=0 then
             writeln('Takogo jilca net')
             else
			 begin
				writeln('Naideno',l,'zapisey');
				writeln('Vvedite iniciali');
				readln(inics);
				for i:=1 to n do
				begin
					with m[i] do
					begin
						if (fam=fio)and(inic=inics) then
						begin
							writeln(nomer);
							exit;
						end;
					end;
				end;
			 end;
        end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.04.2012 в 21:01.
BDA вне форума Ответить с цитированием
Старый 06.04.2012, 21:45   #10
misery24-7
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 23
По умолчанию

BDA,огромное вам спасибо за помощь!!!
misery24-7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив записей. GripEnemy Visual C++ 0 05.12.2011 22:34
Создать массив записей Иринашка Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2011 19:04
Массив записей... eragon_ua Паскаль, Turbo Pascal, PascalABC.NET 2 29.03.2011 15:08
Дублирование текста из колонтитула в теле отчета, отчет формируется в HTML Anatol_rus HTML и CSS 0 16.07.2010 15:14
массив записей qwerty98765 Помощь студентам 3 27.04.2010 19:07