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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2014, 09:28   #1
adaptes
Пользователь
 
Регистрация: 04.12.2013
Сообщений: 25
По умолчанию Работа с комбинированными типами данных

помогите пожалуйста нужно объяснить почему в описании программы указывается массив от 0 до 8, и от 0 до 9?
Код:
program laba8;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  windows;

type man=record
         fio:record family,name,och:string[15];end;
         date:record day,mes,god:integer;end;
         godpos:integer;
         many:integer;
         adres:record ul:string[15];
                      dom,kv:integer;
         end;
         end;
var sot:array [1..20] of man;
srzp:integer;
    n,m,gender:integer;
{имя}names:array[0..1,0..8]of string =(('Николай ','Петр ','Василий ','Акакий ','Александр ','дмитрий ','Григорий ','Олег ','Антон '),
                                      ('Алена','Любовь ','Екатерина ','Елена ','Юлия ','Наталья ','Анна ','Светлана ','Надежда '));
{фамилия}sonames:array[0..1,0..8]of string =(('ежевикин ','каркулин ','Сидоров ','Емельянов ','Попов ','Кирьянов ','Путин ','Медведев ','Королев '),
                                      ('Александрова ','Кочетова ','Япошкина ','Карасева ','Колобкова ','Абрамова ','Куклова ','Собакина ','Глистова '));
{отчество}otsh:array[0..1,0..8]of string =((' Николаевич ',' Петрович ',' Васильевич ',' Акакьевич ',' Александрович ',' Сергеевич ',' Григорьевич ',' Олегович ',' Антонович '),
                                      (' Николаевна ',' Петровна ',' Васильевна ',' Акакьевна ',' Александровна ',' Сергеевна ',' Григорьевна ',' Олеговна ',' Антоновна '));
{улица}ulitsa:array[0..8]of string =(' Революции ',' Шоссе Космонавтов ',' Якутская ',' Подлесная ',' Монастырская ',' Тургенева ',' Попова ',' Стахановская ',' Героев Хасана ');


procedure listok(m:integer);//сотрудники у которых оклад выше среднего
          begin
               write(sot[n].fio.family,' ',sot[n].fio.name,' ',sot[n].fio.och);
                             writeln('| Дата рождения: ',sot[n].date.day,'.',sot[n].date.mes,'.',sot[n].date.god,' | З/п: ',sot[n].many);
                             writeln('--------------------------------------------------------------------------------');
               end;
begin
setconsoleoutputcp(1251);
for n:=1 to 20 do
  begin
  randomize;
  gender:=random(2);
  sot[n].fio.family:=sonames[gender,random(9)];
  sot[n].fio.name:=names[gender,random(9)];
  sot[n].fio.och:=otsh[gender,random(9)];
  sot[n].date.day:=random(31)+1;
  sot[n].date.mes:=random(12)+1;
  sot[n].godpos:=random(31)+1983;
  sot[n].date.god:=random(61)+1930;//
  sot[n].many:=random(100000)+1000;
  sot[n].adres.ul:=ulitsa[random(9)];
  sot[n].adres.dom:=random(101)+1;
  sot[n].adres.kv:=random(1001)+1;
    writeln('Вводим данные на сотрудникa номер: ',n);
    writeln('Фамилия: ',sot[n].fio.family);
    writeln('Имя: ',sot[n].fio.name);
    writeln('Отчество: ',sot[n].fio.och);
    writeln('Дата рождения: ',sot[n].date.day,'.',sot[n].date.mes,'.',sot[n].date.god);
    writeln('Год поступления в фирму: ',sot[n].godpos);
    writeln('Заработная плата: ',sot[n].many);
    writeln('Адрес проживания: ',' yлица:',sot[n].adres.ul);
    writeln('Номер дома: ',sot[n].adres.dom);
    writeln('Номер квартиры: ',sot[n].adres.kv);
    writeln('');
    end;
srzp:=0;
for n:=1 to 20 do
   begin
   srzp:= srzp + sot[n].many;
   end;
srzp:=srzp div 20;
writeln('--------------------------------------------------------------------------------');
writeln('Средняя зарплата: ',srzp);writeln;
writeln('Сотрудники, имеющие оклад выше среднего:');
writeln;
      for n:=1 to 20 do
       begin
        if (sot[n].many)>srzp then listok(m);
          end;
readln;
end
adaptes вне форума Ответить с цитированием
Старый 09.01.2014, 09:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чего плохого в таком диапазоне? Можно было указать и от 10 до 18. А индексы массивов в коде рандомно вычисляются от 0 до 8 включительно - Random(9) возвращает значения от 0 до 8
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.01.2014, 09:46   #3
adaptes
Пользователь
 
Регистрация: 04.12.2013
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А чего плохого в таком диапазоне? Можно было указать и от 10 до 18. А индексы массивов в коде рандомно вычисляются от 0 до 8 включительно - Random(9) возвращает значения от 0 до 8
но ведь если поменять промежуток вместо от (0 до 1) на (от 1 до 2), то программа не работает
adaptes вне форума Ответить с цитированием
Старый 09.01.2014, 09:51   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чего она должна работать при специальном закладывании ошибок в код? И как собираешься менять этот пресловутый промежуток? Между прочим и randomize нужно из цикла вытащить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.01.2014, 09:52   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от adaptes Посмотреть сообщение
помогите пожалуйста нужно объяснить почему в описании программы указывается массив от 0 до 8, и от 0 до 9?
Код:
...
  gender:=random(2);
  sot[n].fio.family:=sonames[gender,random(9)];
  sot[n].fio.name:=names[gender,random(9)];
  sot[n].fio.och:=otsh[gender,random(9)];
...
Это сделано исключительно для удобства, чтобы не прибавлять единицу к случайному числу.
random(X) возращает случайное число от нуля до X-1 включительно (само X никогда не выпадет). Так устроена функция random.
поэтому random(2) вернёт или 0 или 1.
(это пол). Это первый индекс масиива (именно он [0..1]

random(9) вернёт число [0..8] именно потому, что такой диапазон индекса в массиве.

Обратите внимание, что количество вариантов фамилий, имён, отчеств, и улиц совершенно НЕ ОБЯЗАТЕЛЬНО должно быть одинаковым!!!!!

p.s. намного лучше, когда в начале программы задаются константы.
Тогда сразу будет понятно, что от чего зависит.

примерно так это должно выглядеть:
Код:
program laba8;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  windows;

const
  NGender = 2;
  NVariantMen = 9;  {для простоты сделал одинаковую константу для фамилий, имён и отчеств! 
Но в общем случае это может быть три отдельных, независимых константы!}
  NVariantStreet = 9;

type man=record
         fio:record family,name,och:string[15];end;
         date:record day,mes,god:integer;end;
         godpos:integer;
         many:integer;
         adres:record ul:string[15];
                      dom,kv:integer;
         end;
         end;
var sot:array [1..20] of man;
srzp:integer;
    n,m,gender:integer;
{имя}names:array[0..NGender-1,0..NVariantMen-1]of string =
(('Николай ','Петр ','Василий ','Акакий ','Александр ','дмитрий ','Григорий ','Олег ','Антон '),
  ('Алена','Любовь ','Екатерина ','Елена ','Юлия ','Наталья ','Анна ','Светлана ','Надежда '));
{фамилия}sonames:array[0..NGender-1,0..NVariantMen-1]of string =
  (('ежевикин ','каркулин ','Сидоров ','Емельянов ','Попов ','Кирьянов ','Путин ','Медведев ','Королев '),
('Александрова ','Кочетова ','Япошкина ','Карасева ','Колобкова ','Абрамова ','Куклова ','Собакина ','Глистова '));
{отчество}otsh:array[0..NGender-1,0..NVariantMen-1]of string =((' Николаевич ',' Петрович ',' Васильевич ',
      ' Акакьевич ',' Александрович ',' Сергеевич ',' Григорьевич ',' Олегович ',' Антонович '),
      (' Николаевна ',' Петровна ',' Васильевна ',' Акакьевна ',' Александровна ',' Сергеевна ',
        ' Григорьевна ',' Олеговна ',' Антоновна '));
{улица}ulitsa:array[0..NVariantStreet-1]of string =(' Революции ',' Шоссе Космонавтов ',' Якутская ',
                  ' Подлесная ',' Монастырская ',' Тургенева ',' Попова ',' Стахановская ',' Героев Хасана ');

....
begin
setconsoleoutputcp(1251);
for n:=1 to 20 do
  begin
  randomize;
  gender:=random(NGender);
  sot[n].fio.family:=sonames[gender,random(NVariantMen)];
  sot[n].fio.name:=names[gender,random(NVariantMen)];
  sot[n].fio.och:=otsh[gender,random(NVariantMen)];
  sot[n].date.day:=random(31)+1;
  sot[n].date.mes:=random(12)+1;
  sot[n].godpos:=random(31)+1983;
  sot[n].date.god:=random(61)+1930;//
  sot[n].many:=random(100000)+1000;
  sot[n].adres.ul:=ulitsa[random(NVariantStreet)];
  sot[n].adres.dom:=random(101)+1;
  sot[n].adres.kv:=random(1001)+1;
......
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составление и отладка программ с комбинированными типами данных ( записи)Pascal wormiks40 Помощь студентам 0 24.04.2012 22:06
Составление и отладка программ с комбинированными типами данных ( записи) ВалерОК Помощь студентам 1 16.04.2012 15:22
Составление и отладка программ с комбинированными типами данных . ЗАПИСИ. ВалерОК Помощь студентам 6 16.04.2012 00:28
Работа со структурными типами данных.Record.Object XxXSuperXxX Паскаль, Turbo Pascal, PascalABC.NET 1 12.05.2011 10:18
Составление и отладка программ с комбинированными типами данных ( записи) в ТР Евгений1313 Помощь студентам 0 13.04.2009 19:22