Страница 1 из 1

Помогите написать программу

СообщениеДобавлено: 10.06.2011 11:05:51
VirSysError
Дана последовательность n строк(n<= 100)
1)создать массив D ,элементами которого являются длины строк и номера строк(то есть записи)
2)Найти самую длинную строку (вывести ее индекс,а не длину)
3)Для самой длиннойстроки выполнить операцию"реверс"
4) отсортировать массив D, переставив одновременно с длинами строк(по возрастанию) еще и номера строк.
Буду благодарен!

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 11:33:19
kipar
... и все это без циклов и промежуточных переменных :P

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 11:39:41
VirSysError
мне вериться что тута с циклами =) написал создание массива )

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 12:15:23
Maxizar
Код: Выделить всё

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  LCLProc;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

  ElementD = record
    Length :Integer;
    Index  :Integer;
  end;

TD = array of ElementD;
var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
Function MaxLength(var AD:TD):ElementD;
var I:Integer;
begin

   Result:=AD[0];
   if High(AD) < 1 then exit;

   For I:=1 to High(AD) do
     if AD[I].Length > Result.Length then
         Result:=AD[I];
end;

Function Revers(const S:AnsiString):AnsiString;
var I,Len:Integer;
begin
   Result:=S;
   Len:=Length(S);
   For I:=1 to Len do
     Result[Len-I+1]:=S[I];
end;

procedure TForm1.Button1Click(Sender: TObject);
var A1:TD;
    StrList:TStringList;
    I:Integer;
    Maximum:ElementD;
begin
  StrList:=TStringList.Create;

  StrList.LoadFromFile('Strings.txt');

  SetLength(A1,StrList.Count);

  for I:=0 to StrList.Count-1 do
    begin
      A1[I].Index:=I;
      A1[I].Length:=UTF8Length(StrList[I]);
    end;

  Maximum:=MaxLength(A1);

  Memo1.Lines.Add('MaxLen    = '+IntToStr(Maximum.Length));
  Memo1.Lines.Add('Index     = '+IntToStr(Maximum.Index));
  Memo1.Lines.Add('MaxStr    = '+StrList[Maximum.Index]);
  Memo1.Lines.Add('ReversStr = '+AnsiToUTF8(Revers(UTF8ToAnsi(StrList[Maximum.Index]))));

  A1:=Nil;
  StrList.Free;

end;

end.


Последнее задание сами... И .... хотя ладно все равно модераторы удалят мои коменты :(

Изображение

Если содержание файла было таким:
Код: Выделить всё
Наклейка в маршрутке :
Перечень лиц,имеющих право бесплатного проезда:
1) дети до 7 кг
2)агенты матрицы (при предъявлении документа)
3)лауреаты нобелевской премии
4)любовницы лауреатов нобелевской премии
5) ТОм Круз
18 сек
Дополнительные услуги, предоставляемые водителем :
1) посигналить - 5 руб
2) посигналить два раза 7 руб
3) хлопнуть в ладоши 7 руб
4) закричать  Аа-а-аа-а 50
5) дать порулить - 500

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 12:54:23
VirtUX
Код: Выделить всё
Result:=AD[0];
   if High(AD) < 1 then exit;

Может вызвать ошибку, т.к. еще не пройдена проверка на длину массива

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 18:20:40
Maxizar
VirtUX :D :D :D Ну программа написана на коленке, без всяких там а вдруг.. Я вообще не любитель отвечать на подобные вопросы, и задачи, когда у чел 1 сообщение, он ничего не сделал, кода нет, одна задача, А мы тут .... не решаем... Вот я и подумал, ведь человек человеку друг... а бедняга VirSysError, 1 год 1 месяц 1 неделю 1 день 1 час и 1 минуту не может решить поставленную задачу, И я мол типа решил помочь. Зачем (Ведь я не люблю этого делать) да делать нечего было вот и написал, а то ведь вдруг ..... ну Вы понимаете :mrgreen:

Написал бы больше. Но боюсь я модераторов, вдруг накажут :oops:

PS. Предвижу резонный вопрос почему только 1 год 1 месяц 1 неделю 1 день 1 час и 1 минуту ГДЕ секунда?, знаете это философский вопрос, на который пока у меня нет ответа :evil:

Re: Помогите написать программу

СообщениеДобавлено: 10.06.2011 20:00:36
VirtUX
Чем больше кода, тем больше мыслей - как у кодируещего, так и у разбирающего. ИМХО - это позитив.
Секунда очень важна! Ведь именно в этот момент приходит озарение. Потом уже через минуту появляется уверенность в идее. Через час готов начальный план. Через неделю пожинаем первые плоды. Через месяц начинаем альфа-тест. Через год получаем гонорар и удовлетворение от проделанной работы. ИМХО без секунды никак нельзя!
Спросите почему такой длительный процесс тестирования? Хм... Подымите руку те, кто после непродолжительных тестов получил безглючный, обожаемый заказчиком проект? А? Есть такие? Что Вы говорите: "Скомпиленая пустая форма не глючит - дэ'факто!"? А сколько раз Вы ее уже запустили? На скольких ПК/ОС? Еще не запускали? Просто - знаете?
Мое мерси за флуд. Но здесь намек постеру на решение его задачи, и не только этой ;)