Помощь в решении задач на Pascal/Delphi

scrptn

Пользователь
Как вижу, самые частые темы в этом подфоруме посвящены именно задачкам на Паскале и Дельфи. В связи с этим, чтобы не плодить темы, предлагаю:
  1. Искать уже готовые или похожие решения среди тем. Особенно это касается гостей и тех, кто регистрируется только для этого.
  2. Если не нашли решения, то пишем задание в эту тему - другим потом будет легче искать. Формулируем чётко и ясно - желательно так, как вам её сформулированли в ВУЗе или школе (хотя там не всегда делают это чётко и ясно). Постараюсь отвечать на всё, но сторонняя помощь приветствуется. :)
  3. Если задача слишком сложна (например, вы учитесь в МГТУ им. Баумана), то я могу максимум дать ссылки или подкинуть идеи для алгоритма.
  4. Если в задаче есть формулы - большая просьба вставлять их картинкой или в другом доступном для чтения виде, а не объяснять "на пальцах".
  5. Если вам нужно решение срочно - что ж, надо заранее думать :)
Важно! Всем нам свойственно ошибаться, поэтому, если в моих решениях будут ошибки, то уж постарайтесь разобраться самостоятельно. Простые задачи, как правило, я решаю на бумаге и не пробую запустить в среде Паскаля/Дельфи, так что возможны опечатки.

Помимо прочего сообщаю: не люблю решений "под ключ", поэтому буду предлагать обычно только одну процедуру/функцию или кусок кода, решающего задачу. Если вы не знаете, куда её надо вставить - буду отсылать к учебникам. :)
 
A

andrey2

Guest
кто может помоги решить
пропустил два урока и не знаю этой темы

Free Pascal
1) Вывести на экран кратчайшее слово в тексте.
2) Вывести, на экран самое длинное слово в тексте.
3) Превратить текст, переставив слова текста в обратном порядке.
4) Вывести на экран букву, которая встречается чаще всего.
5) Составить программу, которая подсчитывает, какой процент каждой буквы встречается в заданном тексте.
6) Составить программу, что перед каждым словом в тексте, ставит число, ровное количеству букв в этом слове. (11)
7) Составить программу, которая замещает в каждом слове текста последнюю букву с первой.
8) Составить программу, которая определяет сколько раз в тексте встречается каждая буква.
9) Превратить текст, заменяя знак, который повторяется несколько раз, на знак и число, которое равняется числу повторений.
Например текст<<аааббгггг>> нужно превратить на «аЗб2г4».
извините за грамматические ошибки но российской я не изучал
 

scrptn

Пользователь
andrey2
1. Для кого тема висит? Объединил.
2. Будет время, посмотрю.
 
L

lenok

Guest
 ЗАДАНИЕ
1. Разработать систему порождающих классов таким образом, чтобы в последнем поколении находился класс, указанный в варианте задания (количество поколе-ний не менее трех).
2. Определить состав и назначение полей данных и методов для введенных клас-сов. Среди этих методов по крайней мере один должен быть виртуальным (его виртуальность должна быть использована в других методах).
3. Составить программу демонстрирующую работу с введенной системой классов. В программе должны быть определены статические и динамические объекты последнего поколения. Также в программе следует показать работу всех опре-деленных методов для экземпляров объектов каждого типа, в том числе конст-рукторов и деструкторов.

Вариант задания Закрашенный треугольник.
 

scrptn

Пользователь
Я специально тему сверху прикрепил вверху страницы. Ща перенесу.
 

scrptn

Пользователь
[quote name='кристина19' date='Сегодня, 14:14' post='478470']Здравствуйте. Мне по программированию дали задачи. Вычислить среднее арифметическое элементов массива, после этого найти и вывести на экран все локальные минимумы данного массива. С первой задачей я справилась, а как вторую делать не доходит. Может кто знает или объяснит хотя бы ? Просто предмет появился впервые, у меня физико-математическое образование, так что delphi даётся тяжеловато ) заранее спасибо.

что такое локальный минимум я знаю ) за ссылки на полезную теорию или минимальные объяснения также буду благодарна =)
[/quote]

кристина19
у меня физико-математическое образование, так что delphi даётся тяжеловато )
Скажи мне, с каким еще образованием программирование должно даваться проще, как ни с физ-матом?

Итак, ты знаешь, что такое локальный минимум. Далее, ты знаешь, что в массиве содержатся какие-то элементы, каждому из которых присвоен индекс, т.е. порядковый номер в массиве. Ты знаешь, что элементы можно сравнивать между собой. Ты знаешь, что, если речь идет о локальном минимуме, то нужно сравнить данное значение с предыдущим и последующим - точно так же, как в любой функции (массив можно рассматривать в качестве дискретной/кусочной функции). Обощая эти знания, ты можешь догадаться, что для того чтобы найти локальный минимум, нужно всего лишь сравнить каждый элемент массива (кроме первого и последнего) с предыдущим и последующим. Все, это твое исчерпывающее знание. Если дельфи кажется настолько заумным языком, бери в руки бумажку и пиши словами, а потом переноси в программу.

Успехов.
 
К

кристина19

Guest
Соберите нервы в коробочку, уважаемый :crazy: и не умничайте. я программу написала, но при компилляции значения выдаются частично, т.е. второе перезатирает первое.

если вам нечего сказать, молчите ) молчание - золото :)

и да, можете отправлять в бан за правду-матку, страдать не буду )
 

scrptn

Пользователь
кристина19
Исходник покажи, обиженная. Не нужно быть Вангой, чтобы прозреть, что ты все значения сохраняешь в одну переменную, а потом ее выводишь, вместо того, чтобы выводить сразу по нахождению.
 
V

velamut

Guest
Народ помогите найти ошибку или написать по проще алгоритм!

ЗАДАЧА
Ввести текст. Найти в нем количество слов, начинающихся и заканчивающихся гласной буквой. Вывести эти слова и их количество.

Вот код программы выводит только количество слов которые начинаються на гласные а нужно что бы одновременно начинались и заканчивались гласной буквой!



unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label3: TLabel;
Edit1: TEdit;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close;
end;
const maxn=100;
var s:array[1..maxn] of string;
l,n,i,k:integer;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
for i:=1 to n do
s:=memo1.Lines[i-1];
k:=0;
for i:=1 to n do
begin
l:=length(s);
if (pos(s[1], 'аоиуеыэюяАОИУЕЫЭЮЯ') > 0)
and (pos(s[1], 'аоиуеыэюяАОИУЕЫЭЮЯ') > 0)
then k:= k+1
end;
label2.Caption:=inttostr(k);
end;
end.
 

scrptn

Пользователь
velamut
Вот эти строчки:
Код:
if (pos(s[i][1], 'аоиуеыэюяАОИУЕЫЭЮЯ') > 0) 
and (pos(s[i][Length(s[i])], 'аоиуеыэюяАОИУЕЫЭЮЯ') > 0)
В первой ты проверяешь первый символ, во второй - последний. А последний - это тот, который в позиции, равной длине строки. Поэтому пользуемся процедурой нахождения длины строки - Length(). Если она по-другому называется - посмотри, как правильно, но суть такая.
 
W

wowannn

Guest
Помогите Решить задачи… в Паскале…
1) Описать процедуру InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры поменять порядок следования цифр на обратный для каждого из пяти данных целых чисел.
2) Описать функцию Quarter(x, y) целого типа, определяющую номер ко-ординатной четверти, в которой находится точка с ненулевыми вещест-венными координатами (x, y). С помощью этой функции найти номера ко-ординатных четвертей для трех точек с данными ненулевыми координата-ми.
3) Дан массив размера N. Вывести его элементы в обратном порядке. Дан массив размера N. Вывести его элементы в обратном порядке.
4) Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию (см. задание Array4). Если образуют, то вывести знаменатель прогрессии, если нет — вывести 0.
5) Дана строка S и текстовый файл. Добавить строку S в начало файла.
 

scrptn

Пользователь
#1

Код:
procedure InvertDigits(var k: integer);

  { возведение в степень для целых чисел }
  function IntPower(b, e: integer): integer;
  begin
    IntPower := exp(ln(;)*e)
  end;

  { количество десятичных цифр в числе }
  function DecIntLen(n: integer): integer;
  begin
    for i := 0 to 30 do
    begin
      if ( n div IntPower(10,i) ) = 0 then
      begin
        DecIntLen := i;
        Break
      end
    end
  end;

  { десятичная цифра в заданной позиции,
    позиция считается с младших разрядов,
    начиная с нуля }
  function DecDigitAt(src, pos: integer): integer;
  begin
    DecDigitAt := ( src div IntPower(10,pos) ) - ( src div IntPower(10,pos+1) )*10
  end;

  var result: integer;
 
begin
  result := 0;

  for i := DecIntLen(k) downto 0 do
  begin
    result := result*10 + DecDigitAt(k,i-1)
  end;

  InvertDigits := result;
end;
 

scrptn

Пользователь
#2
решение тривиально:
if x>0 and y>0 then первый квадрант
if x<0 and y>0 then второй квадрант
...

#3
Код:
{ x - массив, n - его длина: Length(x) }
for i := 1 to (n div 2) do
begin
  x := a[i];
  a[i] := a[n-i+1];
  a[n-i+1] := x;
end
Вывод элементов без инверсии массива:
Код:
for i := Length(x) downto 1 do writeln(x[i])
 

scrptn

Пользователь
#4
Код:
var q: float; 
    isProgression: boolean = true;

q := x[2] / x[1];

for i := 3 to Length(x) do
begin
  if ( x[i] / x[i-1] ) <> q then
  begin
    isProgression := false;
    Break
  end
end;

if isProgression then
  writeln("Yes, q = ", q)
else
  writeln("No");
 

scrptn

Пользователь
#5
Здесь все зависит от того, каким способом обрабатываются файлы (и какова их длина). Не уверен, какой именно Pascal выиспользуете, поэтому наугад писать не буду. Читайте справочники по функциям ввода-вывода и обработке файлов.
 
W

wowannn

Guest
scrptn - спасибо...
Последнию задачу хоть на угад попробуй, мне начать главное, а там я под гоню её...
 
W

wowannn

Guest
И ещё, если сможешь нарисуй блок схемы, к каждой задачи в Пайнте или в Ворде... очень надо...
 
A

artplan

Guest
Люди добрые, помогите бедному студенту, не изучавшему в школе паскаль, решить 2 задачки.

1.Пусть a и b – два массива длины N. В каждом из них сверху вниз записано N-значное (десятичное) число по одной цифре в каждом элементе. Обозначить эти числа соответственно A и B. Составить программу сравнения этих чисел. Если A<B, то переменной V присвоить значение 0; в противном случае положить V = 1. Печатать V и числа A, B.

2.У вещественного вектора X (x1, x2, …, xN) компоненты с нечетными номерами заменить их квадратами, компоненты с четными номерами заменить их кубами. Печатать исходный и преобразованный векторы.
 
Сверху