Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Множества и записи


Автор: CaRaMeLca 16.2.2010, 21:39
1) Дан список студентов группы с соответствующими отметками по предмету. С клавиатуры вводится фамилия и отметка. Описать процедуру, которая в зависимости от отметки даёт количественную оценку работы. Например: отлично - Петров;
плохо - Михайлов и т.д.

2) Рациональное число задано в виде записи с двумя полями
............
числитель: integer;
знаменатель: integer;
............
Определить есть ли среди n рациональных чисел равные.

Автор: Mignight 23.2.2010, 12:17
 
Народ хелп! момогите пожалуйста решить задачки:
1. Сформировать множество целых чисел случайным образом с желаемым числом членов и распечатать его. Выделить из него два множества чисел, делящихся на 2 и на 3. Оба распечатать.

2. Задан целочисленный массив В(n). Сформировать по нему массив записей, в котором записи имеют поля:
..........
поле-1 - компонента массива;
поле-2 - шестнадцатиричное представление;
..........
с использованием процедуры перевода компоненты массива из десятичного представления в шестнадцатиричное.


Заранее спасибо

Автор: ФедосеевПавел 23.2.2010, 17:43
Показывай, что сам наваял, в чём помощь нужна.

Автор: Mignight 1.3.2010, 19:37
слушай я "наваять" вообще и этой темы ничего не смог, поэтому и обратился за помощью
только по первой задаче смог и то не через строки а через множества... Так что помогите чем можете ^_^

Автор: ФедосеевПавел 1.3.2010, 20:19
Код
TYPE
  TSetOfInt = Set of Byte;
PROCEDURE ShowSet(S:TSetOfInt);
VAR
  i : Byte;
BEGIN
  for i:=0 to 255 do begin
    if i in S then Write(i:4);
  end;
  WriteLn;
END;
VAR
  Quantity  : Byte;
  SetOfInt,
  SetOf2,
  SetOf3    : TSetOfInt;

  i         : Byte;
  t         : Byte;
BEGIN
  Randomize;
  Write('Input quantity of elements: ');
  ReadLn(    Quantity);
  SetOfInt:=[];
  for i:=1 to Quantity do begin
    repeat
      t:=Random(256);
    until NOT (t in SetOfInt);
    Include(SetOfInt, t);
  end;
  SetOf2:=[];
  SetOf3:=[];
  for i:=0 to 255 do begin
    if i in SetOfInt
    then begin
      if (i mod 2)=0 then Include(SetOf2, i);
      if (i mod 3)=0 then Include(SetOf3, i);
    end;
  end;
  WriteLn('Built set:');
  ShowSet(SetOfInt);
  WriteLn('Multiply of 2:');
  ShowSet(SetOf2);
  WriteLn('Multiply of 3:');
  ShowSet(SetOf3);
END.

Автор: ФедосеевПавел 1.3.2010, 20:41
Код
PROGRAM Pas_026b;
CONST
  N     = 10;
TYPE
  TRec  = RECORD
    Number : Word;
    HexStr : String[4];
  END;
  TArrInt = array [1..N] of Word;
  TArrRec = array [1..N] of TRec;
FUNCTION HexStr( VAR Num; ByteCount : Byte) : String;assembler;
asm
        les di,@Result     {get address of function result}
        mov dx,ds          {save Turbo's DS in DX         }
        lds si,num         {get number address            }
        mov al,ByteCount   {how many bytes?               }
        xor ah,ah          {make a word                   }
        mov cx,ax          {keep track of bytes in CX     }
        add si,ax          {start from MS byte of number  }
        dec si
        shl ax,1           {how many digits? (2/byte)     }
        cld                {store # digits (going forward)}
        stosb              {in destination string's length byte}
@@HexLoop:
        std                {scan number from MSB to LSB   }
        lodsb              {get next byte                 }
        mov ah,al          {save it                       }
        shr al,1           {extract high nibble           }
        shr al,1
        shr al,1
        shr al,1
        add al,90h         {special hex conversion sequence}
        daa                {using ADDs and DAA's           }
        adc al,40h
        daa                {nibble now converted to ASCII  }
        cld                {store ASCII going up           }
        stosb
        mov al,ah          {repeat conversion for low nibble}
        and al,0Fh
        add al,90h
        daa
        adc al,40h
        daa
        stosb
        loop  @@HexLoop       {keep going until done           }
        mov  ds,dx            {restore Turbo's DS              }
END;

PROCEDURE FillArrInt(VAR a : TArrInt);
VAR
  i : Integer;
BEGIN
  for i:=1 to N do begin
    a[i]:=Random($FFFF);
  end;
END;

PROCEDURE MakeArrRec(VAR a : TArrInt; VAR b : TArrRec);
VAR
  i : Integer;
BEGIN
  for i:=1 to N do begin
    b[i].Number:=a[i];
    b[i].HexStr:=HexStr(b[i].Number, SizeOf(b[i].Number));
  end;
END;

VAR
  B : TArrInt;
  C : TArrRec;
  i : Integer;
BEGIN
  Randomize;
  FillArrInt(B);
  MakeArrRec(B, C);
  WriteLn('    B[i]    c[i]   HexStr');
  for i:=1 to N do begin
    WriteLn(b[i]:8, c[i].Number:8, c[i].HexStr:8);
  end;
END.

Автор: Mignight 4.3.2010, 17:40
Спасибо большое""!

Автор: YOurk 3.1.2011, 11:37
Построить множество, состоящее из всех парных простых чисел в интервале от 1 до 1000. Парными простыми числами называют два простых числа, разность между которыми равна 2, например: 3 и 5, 11 и 13, 17и 19.
(Использовать метод решето Эратосфена  

(http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%88%D0%B5%D1%82%D0%BE_%D0%AD%D1%80%D0%B0%D1%82%D0%BE%D1%81%D1%84%D0%B5%D0%BD%D0%B0  - на случай надобности инфы)

ответ пришлите на [email protected]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)