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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 17:39   #1
eduard.80@mail.ru
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 15
По умолчанию Как правильно описать процедуру? Турбопаскаль.

Ошибка где то в описании процедуры, как правильно сделать?
код:

Код:
program LAB716;
        uses crt;
        const n=1;
        type
         book=record
          name,number,adress:string;


         end;
        procedure numpoisk(a:array of book); {ошибка по ходу здесь, где понять не могу(((}
                  var zaprosname: string;
                      i,n:integer;
                  begin
                       writeln('Для поиска телефона введите имя абонента*');
                       readln(zaprosname);
                        for i:=1 to n do
                         with a[i] do
                          if zaprosname=a[i].name then
                          writeln('Номер телефона * ',a[i].number)

                  end;
        procedure adresspoisk(a:array of book);
                  var zaprosnumber:string;
                  i,n:integer;
                  begin
                       writeln('Поиск адреса. Введите номер телефона*.');
                       readln(zaprosnumber);
                        for i:=1 to n do
                         with a[i] do
                         if zaprosnumber=a[i].number then
                         writeln('Адресс абонента: ',a[i].adress)
                        else
                       break;
                  end;
        var a:array [1..n] of book;
            i,b:integer;
        begin
         for i:=1 to n do
         with a[i] do
          begin
           writeln('Введите имя абонента*');
           readln(name);
           writeln('‚Введите адресс абонента');
           readln(adress);
           writeln('Введите номер телефона*');
           readln(number);
           clrscr;
          end;
        writeln('Поиск номера телефона: введите  1');
        writeln('Поиск адреса: введите 2');
        readln(b);
        clrscr;
         if b=1 then  numpoisk(a);                           (или здесь ошибка?)
         if b=2 then  adresspoisk(a);
        end.

Пока прога была без процедур, она работала нормально, а вот с процедурами я туплю(((

И ещё вот такая проблемка была: когда в описании записи
book=record
name,number,adress:string;
я записал number: integer
и вводил затем номер моб. телефона, ответом было четырёхзначное число, вместо 10 цифр, прикол в этом: -32768 .. 32767 интервал integer?



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.12.2011 в 10:07.
eduard.80@mail.ru вне форума
Старый 15.12.2011, 17:45   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
procedure numpoisk(a:array of book);
var zaprosname: string;
i:integer;// n не надо
Цитата:
прикол в этом: -32768 .. 32767 интервал integer?
Да!
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума
Старый 15.12.2011, 20:34   #3
eduard.80@mail.ru
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 15
По умолчанию

Исправил, всё равно не выводит номер, что не работает?
eduard.80@mail.ru вне форума
Старый 15.12.2011, 21:03   #4
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Условие задания напишы.
Люблю на ты.Я человек простой
Leshii вне форума
Старый 15.12.2011, 21:10   #5
eduard.80@mail.ru
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 15
По умолчанию

Сформируйте массив записей - записную телефонную книгу. Написать программу поиска намера телефона по имени и поск адреса по номеру телефона.
eduard.80@mail.ru вне форума
Старый 15.12.2011, 21:23   #6
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Держы, вопросы? То что надо уже добавиш сам.

Код:
type tel = record 
      Imya: string [30]; 
      nomer: longint; 
      end; 
      file_tel = file of tel; 
var f: file_tel; 
    name, st: string; 
Procedure vvod_zapisi (var z: tel); 
begin 
     writeln ('Vvedite Imya i nomer telefona'); 
     with z do 
     begin 
     readln (Imya); 
     readln (nomer); 
     end; 
end; 
procedure VVod_file (var r: file_tel); 
var n, i: byte; 
    z: tel; 
begin 
     rewrite (r); 
     writeln ('Skolbko zapisey gelayete vvesti'); 
     readln (n); 
     for i: = 1 to n do 
     begin 
          vvod_zapisi (z); 
          write (r, z); 
     end; 
     close (r); 
     readln; 
end; 
Procedure vivod_zapisi (z: tel); 
begin 
     write (z.Imya: 20); 
     writeln (z.nomer: 15); 
end; 
procedure shapka; 
begin 
     textcolor (5); 
     write ('Имя': 20); 
     writeln ('телефон': 15); 
     textcolor (15); 
end; 
procedure ViVod_file (var r: file_tel); 
var n, i: byte; 
    z: tel; 
begin 
     clrscr; 
     shapka; 
     reset (r); 
     i: = 0; 
     while not (eof (r)) do 
     begin 
          seek (r, i); 
          read (r, z); 
          vivod_zapisi (z); 
          i: = i +1; 
     end; 
     close (r); 
     readln; 
end; 
procedure poisk (var r: file_tel; s: string; q: longint); 
var z: tel; 
    i: byte; 
begin 
     writeln ('Введите Имя'); 
	 writeln('Введите номер');
     readln (s); 
	 readln(q);
     reset (r); 
     i: = 0; 
     clrscr; 
     shapka; 
     while not eof (r) do 
     begin 
     seek (r, i); 
     read (r, z); 
     if z.Imya = s and ( второе условие поиска ) then vivod_zapisi (z); 
     i: = i +1; 
     end; 
     readln; 
end; 
procedure menu (var r: file_tel); 
var k: byte; 
begin 
     repeat 
     clrscr; 
     writeln ('Ваш выбор'); 
     writeln ('1: Создание справочника ');  
     writeln ('2: Ввода српавочнкиа '); 
     writeln ('3: Поиск '); 
     writeln ('4: выход '); 
     write ('ваш выбор'); 
     readln (k); 
     case k of 
     1: vvod_file (r); 
     2: vivod_file (r); 
     3: poisk (r, st) 
     end; 
     until k = 4; 
end; 

begin 
     clrscr; 
     writeln ('Введите название файла'); 
     readln (name); 
     assign (f, name); 
     menu (f);
end.
Люблю на ты.Я человек простой
Leshii вне форума
Старый 15.12.2011, 21:44   #7
eduard.80@mail.ru
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 15
По умолчанию

Спасибо, ув.Leshii, за готовую программу, но она для меня немного таво-тяжеловато при моих познаниях языка))), я бы хотел со своей разобраться, чего там неправильно? Если можна объясни на пальцах.
Я так понимаю, что процедура не читает то, что я ввожу в запись. Я неправильно обращаюсь к записи или как? Дело в том, что без процедур программа всё нормально выводила. Хочется разобраться.
У тебя запись идёт в файл(file_tel = file of tel;
var f: file_tel? А потом процедуры к нему обращаются?
eduard.80@mail.ru вне форума
Старый 15.12.2011, 22:02   #8
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Для ввода номера телефона таки лучше использовать не integer, а longint. По сему и ошибка.

Цитата:
Min значение longint = -2147483648
Max значение longint = 2147483647
Ну а теперь просто посмотри на свою процедуру

a:array of book не совсем понятна даная запись, понятней скажем бы было так a: book;

А у тебя получается в шапке объявление динамического массива ( ну а в условии сказано просто, массив записей ), почитай тут нажми ( там с примерами )

Процедура ввода

procedure VVod_file (var r: file_tel); берёт значения из


type tel = record .

там где указаны

Imya: string [30];
nomer: longint;
end;

Ну я тебе для того и кинул пример, чтоб было с чего списать.

Ну и понятно что без процедур легче

Или у тебя таки с применением динамического массива ?
Люблю на ты.Я человек простой
Leshii вне форума
Старый 15.12.2011, 22:23   #9
eduard.80@mail.ru
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 15
По умолчанию

Дык, какой массив напишу такой и будет. Я условие задачи написал без изменений.
В условии написано массив записей. Вот над этим и страдаю. По ходу если я ввожу туда данные, то динамический.ХЗ.
В общем я ввожу пока одно имя, один адрес и один телефон(const n=1. Процедура начинает работать ибо мне выводится надпись: "Для поиска телефона введите имя абонента", но в итоге нифига не выводит в ответе, соответственно либо проблемма в массиве записей(туда ничего не записывается, хотя до процедур записывалось(((), либо в обращении процедуры к массиву записей:
procedure numpoisk(a:array of book);. Или я саму процедуру неправильно написал?, попробую её отдельно скомпилировать.
Пробовал: понятней скажем бы было так a: book;, результат тот же.
eduard.80@mail.ru вне форума
Старый 15.12.2011, 22:30   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
program LAB716;
uses crt;
type
book=record
name,number,adress:string;
end;
type ab = array[1..100] of book;


var a:ab;
i,b,n:integer;

procedure numpoisk(a:ab); {ошибка по ходу здесь, где понять не могу(((}
var zaprosname: string;
i,n:integer;
begin
writeln('Для поиска телефона введите имя абонента*');
readln(zaprosname);
for i:=1 to n do
with a[i] do
if zaprosname=a[i].name then
writeln('Номер телефона * ',a[i].number)
end;

procedure adresspoisk(a:ab);
var zaprosnumber:string;
i:integer;
begin
writeln('Поиск адреса. Введите номер телефона*.');
readln(zaprosnumber);
for i:=1 to n do
with a[i] do
if zaprosnumber=a[i].number then
writeln('Адресс абонента: ',a[i].adress)
else
break;
end;



begin
readln(n);
for i:=1 to n do
with a[i] do
begin
writeln('Введите имя абонента*');
readln(name);
writeln('‚Введите адресс абонента');
readln(adress);
writeln('Введите номер телефона*');
readln(number);
clrscr;
end;
writeln('Поиск номера телефона: введите 1');
writeln('Поиск адреса: введите 2');
readln(b);
clrscr;
if b=1 then numpoisk(a);
if b=2 then adresspoisk(a);
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать процедуру в С++ Devil21RUS Помощь студентам 1 17.10.2011 11:54
Описать процедуру sear Паскаль, Turbo Pascal, PascalABC.NET 1 11.05.2011 13:20
Как правильно описать функцию? аукшщ Общие вопросы C/C++ 2 19.01.2009 11:37
Как правильно написать процедуру Cold Went Компоненты Delphi 1 29.04.2008 14:21
Как в XML Schema правильно описать дочерние элементы Stilet HTML и CSS 4 21.11.2007 15:04