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

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

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

Boriss
Статус: Академик
Рейтинг: 2466
∙ повысить рейтинг »
star9491
Статус: Профессионал
Рейтинг: 2281
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Профессионал
Рейтинг: 1102
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1553
Дата выхода:20.09.2010, 23:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:282 / 191
Вопросов / ответов:3 / 3

Вопрос № 179943: Доброе время суток! Программа на Дельфе (массивы) Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам. Если кто сделает, просьба дать не только код, но и все исходники....


Вопрос № 179944: Доброе время суток! Программа на Дельфе (массивы) Ввести с клавиатуры фамилии студентов и их шифры, сохраняя информацию в файле. Упорядочить данные по фамилии или по шифру в зависимости от желания пользователя. После ввода данных иметь возможно...
Вопрос № 179945: Доброе время суток! Программа на Дельфе (Циклы, факториал) Дано целое число n. Вводится с клавиатуры. Вычислить: y=(n!/sin12)+(((n-1)!)/((sin12+sin14)^2))+(((n-2)!)/((sin12+sin14+sin16)^3))+...+(1!/((sin12+...+sin(10+2n))^n) Если ...

Вопрос № 179943:

Доброе время суток!
Программа на Дельфе (массивы)
Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам.

Если кто сделает, просьба дать не только код, но и все исходники.

Отправлен: 15.09.2010, 23:09
Вопрос задал: pikvar, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает 6a3uJI, 8-й класс :
Здравствуйте, pikvar.
Предлагаю следующее решение Вашей задачи.

Описание:
На форме (fMain) расположены два компонента TLabel (labArray, labResult), два компонента TMemo (memArray, memResult), две кнопки TBitBtn (btnCalc, btnClose);
В memArray необходимо ввести двумерный массив с произвольным количеством элементов.
При нажатии на кнопку btnCalc вычисляется сумма элементов каждого столбца, результат выводится в memResult.
При нажатие на кнопку btnClose приложение закрывается.

Алгоритм решения:
Все действия производятся в при нажатии кнопки btnCalc (событие OnClick). Последовательно обрабатываются строки из memArray (строка преобразуется в последовательность целых чисел) и заполняется динамический массив a (a: array of array of integer;). После этого, полученный массив перебирается и высчитывается сумма.

Код:


procedure TfMain.btnCalcClick(Sender: TObject);
var
a: array of array of integer;
i,j,k,n,m,er,sum,p:integer;
st,sub: string;
begin

//Get array

n:= memArray.Lines.Count;
m:= 1;
for i:= 0 to n-1 do
begin
SetLength(a,i+1,m);
st:=memArray.Lines.Strings[i];

sub:='';
k:=0;
for j:=1 to Length(st) do
begin
if CharInSet(st[j],['0'..'9']) then
sub:=sub+st[j]
else
if sub<>'' then
begin
inc(k);
if k>m then
SetLength(a,i+1,k);
val(sub,a[i,k-1],er);
sub:='';
end;
end;
if sub<>'' then
begin
inc(k);
if k>m then
SetLength(a,i+1,k);
val(sub,a[i,k-1],er);
sub :='';
end;

if k<m then
for p := k+1 to m do
a[i,p-1]:=0
else m:=k;
end;

//Calc Sum
memResult.Lines.Clear;
memResult.Lines.Add('');
for i:=0 to m-1 do
begin
sum:=0;
for j:=0 to n-1 do
sum:=sum+a[j,i];
memResult.Lines.Strings[0]:=memResult.Lines.Strings[0]+' '+IntToStr(sum);
end;
SetLength(a,0,0);
end;



Исходник Delphi 2010

Ответ отправил: 6a3uJI, 8-й класс
Ответ отправлен: 16.09.2010, 10:51
Номер ответа: 263076

Оценка ответа: 5

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

  • Вопрос № 179944:

    Доброе время суток!
    Программа на Дельфе (массивы)
    Ввести с клавиатуры фамилии студентов и их шифры, сохраняя информацию в файле. Упорядочить данные по фамилии или по шифру в зависимости от желания пользователя. После ввода данных иметь возможность просмотреть введенную информацию. Программу желательно реализовать с использованием подпрограммы.

    Если кто сделает, просьба дать не только код, но и все исходники.

    Отправлен: 15.09.2010, 23:13
    Вопрос задал: pikvar, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Евгений/Genia007/, Профессионал :
    Здравствуйте, pikvar.
    Предлагаю Вам свой вариант решения данной задачи. Шифр вводится в виде числа.
    Код:
    unit UnitZadacha2;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Grids, StdCtrls, Menus, ExtCtrls, ComCtrls;

    type
    TForm1 = class(TForm)
    Panel1: TPanel;
    MainMenu1: TMainMenu;
    StringGrid1: TStringGrid;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N6: TMenuItem;
    N5: TMenuItem;
    procedure N4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure sort(shif: boolean); // Процедура сортировки
    var
    c, r: integer; // номер колонки и строки таблицы
    m: integer; // номер строки с минимальным шифром
    i, j: integer; // номер строки и колонки используется во время сортировки
    buf: array[0..1] of string; // буфер для обмена строк
    list: TStringList; // Список для сортировки
    begin
    if shif then // Если shif true сортируем по шифру иначе по фамилии
    begin
    for r:= 1 to form1.StringGrid1.rowcount - 1 do
    begin
    m:= r; // минимальный элемент - в r-ой строке
    for i:= r to form1.StringGrid1.rowcount - 1 do
    begin
    if form1.StringGrid1.cells[1, i] = '' then break;
    if StrToInt(form1.StringGrid1.cells[1, i]) < StrToInt(form1.StringGrid1.cells[1, m]) then
    m:= i;
    end;
    if r <> m then
    begin // обменяем r-ую и m-ую строки таблицы
    for c:= 0 to 1 do
    begin
    buf[c]:= form1.StringGrid1.Cells[c, r];
    form1.StringGrid1.Cells[c, r]:= form1.StringGrid1.Cells[c, m];
    form1.StringGrid1.Cells[c ,m]:= buf[c];
    end;
    end;
    end;
    end
    else
    begin
    List:= TStringList.Create; // Создали список
    for i:= 1 to form1.StringGrid1.RowCount do
    if form1.StringGrid1.Cells[0, i] <> '' then
    List.Add(form1.StringGrid1.Cells[0, i]); // Загружаем в список данные
    List.Sort; // Сортируем список
    for i := 0 to List.Count - 1 do
    for j := 1 to form1.StringGrid1.RowCount do
    if form1.StringGrid1.Cells[0, j] = List.Strings[i] then
    begin // обменяем j-ую и i-ую строки таблицы
    for c:= 0 to 1 do
    begin
    buf[c]:= form1.StringGrid1.Cells[c, j];
    form1.StringGrid1.Cells[c, j]:= form1.StringGrid1.Cells[c, i + 1];
    form1.StringGrid1.Cells[c ,i + 1]:= buf[c];
    end;
    end;
    List.Free; // Освободили список
    end;
    end;

    procedure TForm1.N4Click(Sender: TObject);
    begin
    Close;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    StringGriD1.Cells[0,0]:= 'Фамилия';
    StringGriD1.Cells[1,0]:= 'Шифр';
    end;

    procedure TForm1.N5Click(Sender: TObject);
    begin
    sort(true); // Сортируем по шифру
    end;

    procedure TForm1.N6Click(Sender: TObj ect);
    begin
    sort(false); // Сортируем по фамилии
    end;

    procedure TForm1.N1Click(Sender: TObject);
    var
    i, j, y: word;
    f: TextFile;
    begin
    y:= 0;
    AssignFile(f, 'stringdrid.txt'); // Связали переменную с файлом
    Rewrite(f); // Открыли файл для перезаписи
    with StringGrid1 do // Делаем для сетки
    begin
    for i:= 0 to RowCount - 1 do
    if Cells[0, i] <> '' then
    inc(y); // Считаем сколько занято ячеек в сетке
    // Записываем номер колонки и строки
    Writeln(f, ColCount);
    Writeln(f, y);
    // Записываем содержимое ячейки
    for i:= 0 to ColCount - 1 do
    for j:= 0 to y - 1 do
    Writeln(F, Cells[i, j]);
    end;
    CloseFile(F); // Закрыли файл
    end;

    procedure TForm1.N2Click(Sender: TObject);
    var
    f: TextFile;
    x, i, j: Integer;
    str: String;
    begin
    if not Fileexists('stringdrid.txt') then
    begin // Выводим сообщение при отсутствии файла
    ShowMessage('Файла не существует.');
    exit;
    end;
    AssignFile(f, 'stringdrid.txt'); // Связали переменную с файлом
    Reset(f); // Открыли файл на чтение
    with StringGrid1 do // Делаем для сетки
    begin
    // Получаем номер колонки
    Readln(f, x);
    ColCount:= x;
    // Получаем номер строки
    Readln(f, x);
    RowCount:= x;
    // Загружаем сетку
    for i:= 0 to ColCount - 1 do
    for j:= 0 to RowCount - 1 do
    begin
    Readln(f, str);
    Cells[i, j]:= str;
    end;
    end;
    CloseFile(f); // Закрыли файл
    end;

    end.
    Весь проект.
    -----
    Помогли тебе, помоги и ты.

    Ответ отправил: Евгений/Genia007/, Профессионал
    Ответ отправлен: 17.09.2010, 11:35
    Номер ответа: 263086

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

  • Вопрос № 179945:

    Доброе время суток!
    Программа на Дельфе (Циклы, факториал)
    Дано целое число n. Вводится с клавиатуры. Вычислить:

    y=(n!/sin12)+(((n-1)!)/((sin12+sin14)^2))+(((n-2)!)/((sin12+sin14+sin16)^3))+...+(1!/((sin12+...+sin(10+2n))^n)

    Если кто сделает, просьба дать не только код, но и все исходники.

    Отправлен: 15.09.2010, 23:20
    Вопрос задал: pikvar, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Шичко Игорь, Практикант :
    Здравствуйте, pikvar.
    Предлагается следующий код для решения задачи.
    Для возведения в степень подключен модуль Math.
    Вопросы - пишите в форум.
    Удачи.

    Приложение:

    -----
    Если что-то невозможно сделать сегодня, это совсем не значит, что это невозможно сделать НИКОГДА.

    Ответ отправил: Шичко Игорь, Практикант
    Ответ отправлен: 16.09.2010, 09:32
    Номер ответа: 263074

    Оценка ответа: 5

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

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

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

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

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

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

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


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

    В избранное