Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Пупорев Юрий Борисович
Статус: Специалист
Рейтинг: 651
∙ повысить рейтинг >>
_Ayl_
Статус: 8-й класс
Рейтинг: 601
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 394
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 928 от 05.07.2009, 18:05
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 339, экспертов - 155
В номере: вопросов - 2, ответов - 5

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 170013: Помогите пожалуйста с задачей, что то совсем не получается она: Даны две действительные квадратные матрицы порядка n. Получить новую матрицу умножением элементов каждого столбца первой матрицы на наименьшее из значений элементов соответствующе...


Вопрос № 170014: Помогите пожалуйста доделать задачу: Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. Например, если заданные слова «процессор» и «информация», то для букв первого из них ответом должно быть:...

Вопрос № 170013:

Помогите пожалуйста с задачей, что то совсем не получается она:

Даны две действительные квадратные матрицы порядка n. Получить новую матрицу умножением элементов каждого столбца первой матрицы на наименьшее из значений элементов соответствующей строки второй матрицы.

Отправлен: 30.06.2009, 03:37
Вопрос задал: Иванов Виктор Олегович, Посетитель
Всего ответов: 3
Страница вопроса >>


Отвечает Emmanuel Goldstein, 3-й класс :
Здравствуйте, Иванов Виктор Олегович.

FreePascal

Приложение:

-----
Основное правило хакера: "Научился сам, научи другого".

Ответ отправил: Emmanuel Goldstein, 3-й класс
Ответ отправлен: 29.06.2009, 23:06

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251646 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает _Ayl_, 8-й класс :
    Здравствуйте, Иванов Виктор Олегович.

    Вот программа

    Приложение:

    Ответ отправил: _Ayl_, 8-й класс
    Ответ отправлен: 30.06.2009, 12:10

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251665 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает Micren, Практикант :
    Здравствуйте, Иванов Виктор Олегович.
    Программа. Free Pascal. Память для матрицы выделяется динамически.
    Код:

    program P_170013;

    type
    { Тип данных по условию действительный }
    TData=Double;
    PData=^TData;

    { Объект - квадратная матрица }
    TSquareMatrix=object
    private
    { Данные }
    _data:PData;
    { Размерность }
    _dim:Word;
    public
    constructor Init(dim: Word);
    destructor Done; virtual;
    { Возвращает указатель на элемент в заданных строке и столбце }
    { Индексация с нуля }
    function GetItem(row, col: Word): PData;
    { Возвращает размерность }
    function Dimension: Word;
    end;

    function TSquareMatrix.Dimension: Word;
    begin
    Dimension:=_dim;< br>end;

    destructor TSquareMatrix.Done;
    begin
    FreeMem(_data);
    end;

    function TSquareMatrix.GetItem(row, col: Word): PData;
    var
    res:PData;
    begin
    if (row<_dim) and (col<_dim) then begin
    { Вычисление адреса элемента }
    res:=_data;
    Inc(res,row*_dim+col);
    GetItem:=res;
    end else begin
    WriteLn('Index out of bounds');
    GetItem:=nil;
    end;
    end;

    constructor TSquareMatrix.Init(dim: Word);
    begin
    GetMem(_data,dim*dim*SizeOf(TData));
    _dim:=dim;
    end;

    { Заполняет матрицу случайными значениями }
    procedure FillMatrix(matrix:TSquareMatrix);
    var
    i,j,dim:Word;
    begin
    dim:=matrix.Dimension;
    i:=0;
    while i<dim do begin
    j:=0;
    while j<dim do begin
    matrix.GetItem(i,j)^:=Random(101)-50;
    Inc(j);
    end;
    Inc(i);
    end;
    end;

    { Печатает матрицу }
    procedure PrintMatrix(msg:String;matrix:TSquareMatrix);
    var
    i,j,dim :Word;
    begin
    WriteLn(msg);
    dim:=matrix.Dimension;
    i:=0;
    while i<dim do begin
    j:=0;
    while j<dim do begin
    Write(matrix.GetItem(i,j)^:7:1,' ');
    Inc(j);
    end;
    WriteLn;
    Inc(i);
    end;
    end;

    { Ищет минимальный элемент в заданной строке }
    function MinimalInRow(matrix:TSquareMatrix;row:Word):TData;
    var
    i,dim:Word;
    res,item:TData;
    begin
    dim:=matrix.Dimension;
    res:=matrix.GetItem(row,0)^;
    i:=1;
    while i<dim do begin
    item:=matrix.GetItem(row,i)^;
    if item<res then begin
    res:=item;
    end;
    Inc(i);
    end;
    MinimalInRow:=res;
    end;

    { Выполняет всю работу согласно условия }
    procedure Calculate(matrix1,matrix2,result:TSquareMatrix);
    var
    i,j,dim:Word;
    min:TData;
    begin
    dim:=result.Dimension;
    if (dim=matrix1.Dimension) and (dim=matrix2.Dimension) then begin
    i:=0;
    while i<dim do begin
    { Минимальный э лемент в строке 2й матрицы }
    min:=MinimalInRow(matrix2,i);
    j:=0;
    { Идем по столбцу }
    while j<dim do begin
    { Умножаем найденный минимум на элементы столбца }
    result.GetItem(j,i)^:=matrix1.GetItem(j,i)^*min;
    Inc(j);
    end;
    Inc(i);
    end;
    end else begin
    WriteLn('Matrices are of different dimension');
    Exit;
    end;
    end;

    var
    Matrix1,Matrix2,ResultMatrix:TSquareMatrix;
    Dim:Word;

    begin
    Randomize;
    { Вводим размерность матриц }
    Write('Dimension of matrices:');
    ReadLn(Dim);

    { Вызываем конструктор }
    Matrix1.Init(Dim);
    { Заполняем 1ю матрицу }
    FillMatrix(Matrix1);
    { Печатаем }
    PrintMatrix('Matrix 1:',Matrix1);

    { То же для 2й матрицы }
    Matrix2.Init(Dim);
    FillMatrix(Matrix2);
    PrintMatrix('Matrix 2:',Matrix2);

    { Вызываем конструктор для результирующей матрицы }
    ResultMatrix.Init(Dim);

    { Вычисляем согласно условия }
    Calculate(Matrix1,Matrix2,ResultMatrix);

    { Печатаем результат }
    PrintMatrix('R esult Matrix:',ResultMatrix);

    { Освобождаем ресурсы }
    ResultMatrix.Done;
    Matrix2.Done;
    Matrix1.Done;

    ReadLn;
    end.

    Пример работы:
    Код:

    Dimension of matrices:8
    Matrix 1:
    3.0 9.0 45.0 15.0 -9.0 37.0 -38.0 -17.0
    21.0 50.0 -39.0 48.0 -38.0 -2.0 37.0 20.0
    6.0 14.0 -9.0 17.0 10.0 -38.0 37.0 -20.0
    4.0 -13.0 -43.0 40.0 13.0 13.0 -38.0 -45.0
    30.0 -19.0 25.0 -33.0 -19.0 47.0 -10.0 41.0
    -49.0 -43.0 21.0 5.0 -50.0 -20.0 -19.0 1.0
    -44.0 -36.0 -4.0 -10.0 -37.0 -48.0 34.0 3.0
    2.0 -34.0 3.0 20.0 37.0 45.0 -46.0 4.0Matrix 2:
    41.0 -6.0 23.0 47.0 3.0 0.0 -28.0 -11.0
    31.0 -10.0 8.0 19.0 37.0 -47.0 -26.0 -28.0
    30.0 -33.0 -38.0 -18.0 -41.0 -36.0 -22.0 -49.0
    -36.0 -32.0 -42.0 42.0 33.0 -44.0 35.0 16.0
    -15.0 40.0 -26.0 -32.0 22.0 -33.0 -42.0 18.0
    2.0 -1.0 -30.0 -25.0 50.0 -3.0 -2.0 -8.0
    -1.0 25.0 -7.0 44.0 27.0 -29.0 25.0 35.0
    33.0 34.0 15.0 0.0 -35.0 5.0 -35.0 45.0
    Result Matrix:
    -84.0 -423.0 -2205.0 -660.0 378.0 -1110.0 1102.0 595.0
    -588.0 -2350.0 1911.0 -2112.0 1596.0 60.0 -1073.0 -700.0
    -168.0 -658.0 441.0 -748.0 -420.0 1140.0 -1073.0 700.0
    -112.0 611.0 2107.0 -1760.0 -546.0 -390.0 1102.0 1575.0
    -840.0 893.0 -1225.0 1452.0 798.0 -1410.0 290.0 -1435.0
    1372.0 2021.0 -1029.0 -220.0 2100.0 600.0 551.0 -35.0
    1232.0 1692.0 196.0 440.0 1554.0 1440.0 -986.0 -105.0
    -56.0 1598.0 -147.0 -880.0 -1554.0 -1350.0 1334.0 -140.0

    Ответ отправил: Micren, Практикант
    Ответ отправлен: 30.06.2009, 20:16

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251678 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Вопрос № 170014:

    Помогите пожалуйста доделать задачу:

    Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. Например, если заданные слова «процессор» и «информация», то для букв первого из них ответом должно быть: «п е ф м а я».

    Отправлен: 30.06.2009, 03:40
    Вопрос задал: Иванов Виктор Олегович, Посетитель
    Всего ответов: 2
    Страница вопроса >>


    Отвечает Sky-er, 3-й класс :
    Здравствуйте, Иванов Виктор Олегович.
    Решение вашей задачи с коментариями в приложении.

    Приложение:

    Ответ отправил: Sky-er, 3-й класс
    Ответ отправлен: 29.06.2009, 22:24

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251644 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает Micren, Практикант :
    Здравствуйте, Иванов Виктор Олегович.
    Программа. Тестировал Free Pascal.
    Код:

    program P_170014;

    var
    str1,str2:String;
    goodChars,inLineChars:set of Char;

    { Процедура просматривает строку и оставляет в goodChars только те символы,
    которые встречаются один раз }
    procedure parseStr(str:String);
    var
    i:Integer;
    begin
    for i := 1 to Length(str) do begin
    { Если символ есть в inLineChars удалим его из goodChars }
    if str[i] in inLineChars then begin
    goodChars:=goodChars-[str[i]];
    end else begin
    { Если встретился первый раз занесем его в inLineChars }
    inLineChars:=inLineChars+[str[i]];
    end;
    end;
    end;

    { Печатает только те символы, которые есть в goodChar }procedure printStr(str:String);
    var
    i:Integer;
    begin
    for i := 1 to Length(str) do begin
    if str[i] in goodChars then begin
    Write(str[i],' ');
    end;
    end;
    end;

    begin
    goodChars:=[#0..#255];
    Write('String 1:');
    ReadLn(str1);
    Write('String 2:');
    ReadLn(str2);
    parseStr(str1);
    parseStr(str2);
    printStr(str1);
    printStr(str2);
    WriteLn;
    ReadLn;
    end.

    Пример работы:
    Код:

    String 1:процессор
    String 2:информация
    п е н ф м а я
    Редактирование ответа по просьбе автора ответа.
    -----
    ∙ Отредактировал: Федоров Михаил/ Error00, Модератор
    ∙ Дата редактирования: 29.06.2009, 23:58 (время московское)

    Ответ отправил: Micren, Практикант
    Ответ отправлен: 29.06.2009, 22:33

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251645 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.3 от 20.06.2009

    В избранное