Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2010, 21:50
pavlovnik pavlovnik вне форума
Прохожий
 
Регистрация: 24.09.2010
Сообщения: 5
Репутация: 10
По умолчанию 6 простых задач

сдавать надо, сейчас просто разбиратся не могу, 0 в этом,а надо сдать...потом буду сидеть учить,но лучше б чтоб они были. вот тексты.


1. дана символьная тсрока. расположить символы в строке по возрастанию их внутренних кодов.

2.дан массив целых чисел.упорядочить числа по возрастанию.определить количесвто цифр в числах, стоящих на нечетных местах.вывести информацию на экран дисплея.

3.вывести на дисплей все строки текстого файла, содержащие слово *москва*.

4.дано нечетное число n. заполнить квадратную матрицу размером n*n следующим образом:

1- 2- 3- 4-5
16-17-18-19-6
15-24-25-20-7
14-23-22-21-8
13-12-11-10-9

5.нарисовать окружность радиуса R=30 и передвигать ее по траектории
x=r cos(t) (Rx)
y=r sin(t) (Ry) при t [0.4П] , Rx=300; Ry=200

6. реализовать процедуры *вывести элементы списка на экран* и *отсортировать по возрастанию список по значению поля символьного типа* для динамической структуры данныз Список. элемент списка является записью с двумя полями : символьного типа и типа указатель на элемент списка. Элементы списка располагаются в динамической памяти. СПисок задается указателем на первый элемент спика.
Ответить с цитированием
  #2  
Старый 26.09.2010, 03:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Дяденька, за готовыми решениями вам в другой раздел - Работа.

Задачи 1-4 на массивы и циклы,
Задача 5 на простую графику,
Задача 6 на связанный список на указателях.
Все достаточно стандартные.
Единственная интересная задача - задача 4.
И то, только если рассматривать алгоритм навигации на массиве.

Задача 4 решается примерно так:
Код:
procedure TForm1.FillArray(N : Integer);
var
  A : Array Of Array Of Integer;
  I, J : Integer;
  dI, dJ : Integer;
  V : Integer;
begin
  // Create array
  SetLength(A,N);
  For I := Low(A) To High(A) Do
    SetLength(A[i],N);

  // Init array
  For I := Low(A) To High(A) Do
    For J := Low(A[i]) To High(A[i]) Do
      A[I,J] := 0;

  // Fill array
  I := Low(A); J := Low(A[i]);
  dI := 1; dJ := 0;
  V := 1;
  A[I,J] := V;
  While V <= N*N Do
    Begin
      A[I,J] := V;
      If Abs(dI) = 1
        Then
          Begin
            If dI = 1 Then
              Begin
                If (I + dI > High(A)) Or (A[I + dI, J + dJ] <> 0)
                  Then
                    Begin
                      dJ := 1;
                      dI := 0;
                    End;
              End
            Else
              Begin
                If (I + dI < Low(A)) Or (A[I + dI, J + dJ] <> 0) Then
                  Begin
                    dJ := -1;
                    dI := 0;
                  End;
              End;
          End
        Else
          Begin
            If dJ = 1 Then
              Begin
                If (J + dJ > High(A[i])) Or (A[I + dI, J + dJ] <> 0)
                  Then
                    Begin
                      dI := -1;
                      dJ := 0;
                    End;
              End
            Else
              Begin
                If (J + dJ < Low(A[i])) Or (A[I + dI, J + dJ] <> 0) Then
                  Begin
                    dI := 1;
                    dJ := 0;
                  End;
              End;
          End;
      I := I + dI;
      J := J + dJ;
      Inc(V);
    End;

  // Print array
  StringGrid1.ColCount := N;
  StringGrid1.RowCount := N;
  For I := 0 To N-1 Do
    For J := 0 To N-1 Do
      StringGrid1.Cells[I,J] := InttoStr(A[I,J]);

end;
Решение на граничных условиях.
Наверное, можно решить красивее, но пока не могу придумать. Кстати, данному алгоритму пофиг, четная размерность матрицы или нет.
Ответить с цитированием
  #3  
Старый 26.09.2010, 15:18
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от lmikle
Решение на граничных условиях.
Наверное, можно решить красивее, но пока не могу придумать. Кстати, данному алгоритму пофиг, четная размерность матрицы или нет.
4-ю задачу я уже решал, вот ссылочка... и на мой взгляд, у меня решение попроще)
Ответить с цитированием
  #4  
Старый 26.09.2010, 23:37
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тоже добавлю свое решение 4 задачки:
Код:
procedure TForm5.Button1Click(Sender: TObject);
Type
  TDirection = (dRight, dDown, dLeft, dTop);
Var
  Count, i, Col, Row: Integer;
  Direction: TDirection;
begin
 Count := MatrixSize.Value * MatrixSize.Value;
 Direction := dRight;
 Col := 0; Row := 0;
 for i := 1 to Count
 do begin
    Matrix.Cells[Col, Row] := IntToStr(i);
    case Direction of
      dRight: if (Col + 1 = MatrixSize.Value) or (Matrix.Cells[Col + 1, Row] <> '')
              then begin
                   Direction := dDown;
                   Inc(Row);
                   end
              else Inc(Col);
      dDown:  if (Row + 1 = MatrixSize.Value) or (Matrix.Cells[Col, Row + 1] <> '')
              then begin
                   Direction := dLeft;
                   Dec(Col);
                   end
              else Inc(Row);
      dLeft:  if (Col = 0) or (Matrix.Cells[Col - 1, Row] <> '')
              then begin
                   Direction := dTop;
                   Dec(Row);
                   end
              else Dec(Col);
      dTop:   if (Row = 0) or (Matrix.Cells[Col, Row - 1] <> '')
              then begin
                   Direction := dRight;
                   Inc(Col);
                   end
              else Dec(Row);
    end;
 end;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 27.09.2010, 00:36
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от Страдалецъ
Тоже добавлю свое решение 4 задачки:
Все-таки у меня покрасивше алгоритм будет) Хотя, как говорится, свое г.., всегда малиной пахнет) Очень приятно, за разнообразность решений.
Цитата:
Сообщение от XTen
ICQ: 410691984
Уважаемые админы, обратите внимание на данного пользователя, так как, по моим меркам, он разрушительно влияет на форум.
Неприятно, что появляются темы, заканчивающиеся не решением проблемы, а номером его аськи. Интелектуальный потенциал форума ослабевает, а его организация близится к "барахолке".
Ответить с цитированием
  #6  
Старый 27.09.2010, 04:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Гы, все предложенные решения используют один и тот же алгоритм. Разная реализация, но суть одна и та же.

Тут явно должен быть какой-то хитрый алгоритм, бо как не зря в условии сказано, что n нечетное. Но я его не вижу.

По поводу товарища XTen, согласен. При следуюшем таком сообщении будет бан.
Ответить с цитированием
  #7  
Старый 28.09.2010, 00:19
pavlovnik pavlovnik вне форума
Прохожий
 
Регистрация: 24.09.2010
Сообщения: 5
Репутация: 10
По умолчанию

да для меня все задачи интересные...я вот вечером прихожу и все,надо уроки делать и даж времени на учебник нету....институт блин...просто думал форму начинающим а я в делфи 000 вот и поделился с людьми своей проблемой)
Ответить с цитированием
  #8  
Старый 28.09.2010, 02:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Еще раз говорю. Если ты хочешь получить готовые решения, то тебе тогда в другой раздел. Если хочешь все-таки разобраться сам, то делай и спрашивай то, что не получается, но показывай свой код.

Подсказки:
1. Задача на цикл по массиву. Строка в данном случае рассматривается как массив символов. Символы можно сравнивать напрямую. Прочитай, хотябы, про сортировку пузырьком. Потребуется функция Length.

2. То же самое. Плюс: определение, что индекс элемента нечерный (остаток от деления на 2 <> 0), плюс перевод числа в строку и определение ее длинны (Length).

3. Читаем файл по строкам (F : TextFile) и если в строке есть нужное слово (функция Pos), то выводим ее, если нет - ничего не делаем.

4. Уже дали решение

5. Работа с канвой (Canvas, например у TImage). Просто использование методов канвы + цикл для вичисления по соотв. формулам центра.

6. Самая сложная задача в смысле кол-ва кода. Читай про связанные списки и работу с ними. Есть книжка "Готовые алгоритмы Delphi", где можно подсмотреть решение. Если первый метод "вывести элементы списка на экран" довольно простой, то со вторым, "отсортировать по возрастанию список по значению поля символьного типа" придется немного помучиться (сравнивать-то можно напрямую, а вот сортировать там сложнее, хотя, возможно, пузырек опять прокатит, только надо аккуратно его реализовать).
Ответить с цитированием
  #9  
Старый 28.09.2010, 13:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

И так на всякий случай, есть такая функция Odd которая позволяет несколько доступнее определить четность/нечетность числа.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 28.10.2010, 22:57
pavlovnik pavlovnik вне форума
Прохожий
 
Регистрация: 24.09.2010
Сообщения: 5
Репутация: 10
По умолчанию

все,первый три сдал...сейчас думаю что-то 4-ая сложная пропустить и сразу за график взятся или все таки разобраться с кодом предложенным мне...
Ответить с цитированием
  #11  
Старый 29.10.2010, 01:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Разберись лучше. Там не сложно на самом деле.
Ответить с цитированием
  #12  
Старый 07.11.2010, 22:09
pavlovnik pavlovnik вне форума
Прохожий
 
Регистрация: 24.09.2010
Сообщения: 5
Репутация: 10
По умолчанию

ну как сказать...на код пока забил а вот с рисованием...как нарисовать окружность я понял а вот как перемещать ее....
блин, трудно все это(
Ответить с цитированием
  #13  
Старый 07.11.2010, 23:44
Kopik Kopik вне форума
Прохожий
 
Регистрация: 19.10.2010
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от pavlovnik
ну как сказать...на код пока забил а вот с рисованием...как нарисовать окружность я понял а вот как перемещать ее....
блин, трудно все это(
Я почему-то подумал об организации всего дела с передвижением через ползунки TrackBar...
Ответить с цитированием
  #14  
Старый 13.11.2010, 21:08
pavlovnik pavlovnik вне форума
Прохожий
 
Регистрация: 24.09.2010
Сообщения: 5
Репутация: 10
По умолчанию

благодарю за решение 4-ой,первым способом...)
просто во втором непонятно что а там вроде стринггрид...
правда либо я глуплю,либо так надо было сделать,но короче заработало,еще раз спасибо)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter