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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.08.2017, 00:24   #1
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию Не могу разобраться

Есть Задача:
Дано три одномерных массива, элементами которых являются строки. Выбрать в каждом из массивов строку с наименьшей длиной. Определить массив, у которого длина выбранной строки наибольшая.
Задачу нужно решить используя "Функции и процедуры".
Я пытался ее написать, но программа выдает ошибки и я не знаю в чем дело, прошу помощи.
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    R_Edit: TEdit;
    A_L: TLabel;
    B_L: TLabel;
    C_L: TLabel;
    R_L: TLabel;
    A_Memo: TMemo;
    B_Memo: TMemo;
    C_Memo: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.lfm}

{ TForm1 }

 type
  TMatr = array[1..100] of string;

function MinDL(Matr : TMatr; count : Integer) : string;
var
 i, min : integer;
begin
 min := 0;
 for i := 1 to count do
  if Length(i) < min then
  begin
  min := Length(i);
  end;
 Result := min;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 MatrA, MatrB, MatrC : TMatr;
 i, countA, countB, CountC, MinA, MinB, MinC : integer;
begin
 countA := A_Memo.Lines.Count;
 for i := 1 to countA do
  MatrA[i] :=A_Memo.Lines.Strings[i-1];
 countB := B_Memo.Lines.Count;
 for i := 1 to countB do
  MatrB[i] :=B_Memo.Lines.Strings[i-1];
 countC := C_Memo.Lines.Count;
 For i := 1 to countC do
  MatrC[i] :=C_Memo.Lines.Strings[i-1];
 MinA := MinDL(MatrA,countA);
 MinB := MinDL(MatrB,countB);
 MinC := MinDL(MatrC,countC);
 if MinA > MinB and MinA > MinC then
 R_Edit := 'Наибольшая длина строки у массива А'
 else
   if MinB > MinA and MinB > MinC then
   R_Edit := 'Наибольшая длина строки у массива B'
   else
     if MinC > MinA and MinC > MinB then
     R_Edit := 'Наибольшая длина строки у массива C'
     else
       R_Edit:='Длина строки у массивов А,В,С равна';

end;

end.
Вот код целиком, пишу на паскале в лазарусе. А во вложении будут скрины с ошибками.
Изображения
Тип файла: jpg CwDnsFCAqy8.jpg (121.4 Кб, 110 просмотров)
JackGFG вне форума
Старый 20.08.2017, 01:11   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Там номера строк и текст ошибки есть. С переводчиком всё должно быть ясно. На вскидку, следующие ошибки


Путаница с типом ф-ии и параметрами у Length
Код:
function MinDL(Matr : TMatr; count : Integer) : INTEGER;
var
 i, min : integer;
begin
 min := 0;
 for i := 1 to count do
  if Length(  MATR[i]  ) < min then
  min := Length(  MATR[i]  );
 Result := min;
end;

Условия со скобками
Код:
if (MinA > MinB) and (MinA > MinC) then

У едитов есть свойство текст
Код:
R_Edit.TEXT := 'Наибольшая длина строки у массива А'
eoln вне форума
Старый 21.08.2017, 00:18   #3
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Там номера строк и текст ошибки есть. С переводчиком всё должно быть ясно. На вскидку, следующие ошибки


Путаница с типом ф-ии и параметрами у Length
Код:
function MinDL(Matr : TMatr; count : Integer) : INTEGER;
var
 i, min : integer;
begin
 min := 0;
 for i := 1 to count do
  if Length(  MATR[i]  ) < min then
  min := Length(  MATR[i]  );
 Result := min;
end;

Условия со скобками
Код:
if (MinA > MinB) and (MinA > MinC) then

У едитов есть свойство текст
Код:
R_Edit.TEXT := 'Наибольшая длина строки у массива А'
Так и не понял как разобраться с этой ошибкой:Incompatible types: got "LongInt" expected "AnsiString". Пытался присваивать другие типы, но не выходит
JackGFG вне форума
Старый 21.08.2017, 00:25   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Заменить функцию function MinDL из 1 поста на функцию function MinDL из 2 поста
Поставить скобки в строках где есть условия, вот тут
Код:
if (MinA > MinB) and (MinA > MinC)
и в других подобных строках.
А в строках R_Edit := 'бла-бла-бла' добавить TEXT, вот так
Код:
R_Edit.TEXT := 'бла-бла-бла'
Более подробно тут: http://www.programmersforum.ru/showp...73&postcount=4
eoln вне форума
Старый 21.08.2017, 00:27   #5
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию

Это я исправил. Но ошибки остались, не все конечно. Одна из них на (Result:=min):Incompatible types: got "LongInt" expected "AnsiString"
JackGFG вне форума
Старый 21.08.2017, 00:33   #6
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию

Хотя стоп, Это ошибка когда я поменял обратно, integer на string. А так ошибка, в том, что программа не работает верно и она не ищет максимальное среди минимального
JackGFG вне форума
Старый 21.08.2017, 00:40   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Там инициализация минимума не такая, меньше нуля нет ничего положительного
Код:
min := MATR[1] ;
 for i := 2 to count do
  if Length(  MATR[i]  ) < min then
eoln вне форума
Старый 21.08.2017, 00:55   #8
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Там инициализация минимума не такая, меньше нуля нет ничего положительного
Код:
min := MATR[1] ;
 for i := 2 to count do
  if Length(  MATR[i]  ) < min then
Не выходит
Изображения
Тип файла: jpg VxAEPJ86P4k.jpg (115.8 Кб, 130 просмотров)
JackGFG вне форума
Старый 21.08.2017, 00:57   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы прикидываетесь иди действительно со справкой? Вы присваиваете СТРОКУ ЧИСЛУ и удивляетесь, что вас ругают...

Код:
min := Length(MATR[1]);
это же элементарная логика.
p51x на форуме
Старый 21.08.2017, 01:01   #10
JackGFG
Пользователь
 
Регистрация: 20.08.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы прикидываетесь иди действительно со справкой? Вы присваиваете СТРОКУ ЧИСЛУ и удивляетесь, что вас ругают...

Код:
min := Length(MATR[1]);
это же элементарная логика.
Простите, 4 утра просто. Голова так себе соображает. И спасибо работает.
JackGFG вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с Inc Pearl777 Общие вопросы Delphi 4 23.05.2014 22:58
Не могу разобраться m.mshev Общие вопросы C/C++ 6 05.08.2012 17:51
Не могу разобраться! romanov0303 C++ Builder 1 12.03.2012 10:48
не могу разобраться! Apsalon Microsoft Office Excel 1 28.12.2010 18:54
Не могу разобраться!!! Яна Сафронова Помощь студентам 11 12.05.2010 17:56