Большой Воронежский Форум
» Программирование>И снова Паскаль... :(
jin666 22:41 24.05.2007
помогите пожалуйста решить эти задания:
1.) Расположить слова в порядке убывания их длинны в предложене
2.) Составить программу упорядычивания элементов таблицы (одномерный массив, по возрастанию или убыванию)
3) На оси Ох задано n точек с координатами x1,x2,x3,...x(n). Найти точку z сум. раст. от которой до данных точек минимальна

[Ответ]
alex_bas 19:47 25.05.2007
Как на Паскале незнаю, может поможет решение на C#
Это для первой задачи, вторая задача решается аналогично.


using System;
using System.IO;
using System.Collections;

class Program
{
static void Main()
{
ArrayList b = new ArrayList();
ArrayList c = new ArrayList();
char[] sep3 = new char[] { ' ' }; // Здесь можно добавить точки, запятые и т.п. символы
String u = "Именно здесь вводиться предложение которое ты хочеш отсортировать";
int j = 0;
foreach (string ss in u.Split(sep3))
{
b.Add(ss);
c.Add(ss.Length);
}
int temp1 = 0; //Собственно сортировка
string temp2 = null;
for (int i = 0; i < c.Count; i++)
{
j = i;
temp2 = (string)b[i];
temp1 = (int)c[i];

while (j > 0 && temp1 < (int)c[j - 1])
{
c[j] = c[j - 1];
b[j] = b[j - 1];
j--;
}
c[j] = temp1;
b[j] = temp2;
}
b.Reverse();
for (int i = 0; i < b.Count; i++)
{
Console.Write("{0} ",b[i]);
}
Console.ReadLine();
}
} [Ответ]
Raul Leo 19:49 25.05.2007
alex_bas, нифига се, эт че новая версия Паскаля? [Ответ]
alex_bas 20:01 25.05.2007

Сообщение от :
Как на Паскале незнаю, может поможет решение на C#

Я Паскаль незнаю и особо знать нехочу, поэтому выложил решение на том что знаю. По крайней мере из моего решения видно в каком направлении (в плане алгоритма) думать [Ответ]
Raul Leo 20:15 25.05.2007
alex_bas, С, несомненно, рулит, но, по-моему, автор хочет точного решения, а не направления мышления [Ответ]
alex_bas 20:31 25.05.2007

Сообщение от Raul Leo:
alex_bas, С, несомненно, рулит, но, по-моему, автор хочет точного решения, а не направления мышления

тогда извиняюсь, помочь в данном случае ничем не могу [Ответ]
jin666 21:19 25.05.2007
alex_bas, пасибо но нужен паскаль. Но посмотрел твою идею может получиться реализовать на паскале...
а так всё ещё нужен хелп [Ответ]
alex_bas 22:37 25.05.2007
jin666, в третьей задаче похоже надо посчитать среднее арифметическое координат всех точек
на C# я сделал так
перевести на Паскаль у тебя не должно быть сложностей
class Program
{
static void Main()
{

int[] a = new int[] { 1, 2, 3, 4, 5, 6 ,7};// ввод точек в массив
decimal s = 0;
// это собственно расчёт
for (int i = 0; i < a.Length; i++)// a.Length это длинна масива(число точек)
{
s = s + a[i]; // вычисляем сумму всех точек
}

s = s / a.Length; //делим полученную сумму на количество точек
// вывод на экран
Console.WriteLine(s);// это ответ
}
}
Я специально подробно расписал чтобы можно было легко переделать под Паскаль
в первой задаче совместно сортируются два массива в одном находятся слова во втором их длинна
Т.к. массивы созданы одновременно то если сортировать массив с и по его правилам ОДНОВРЕМЕННО с ним переставлять элементы массива b то получим отсортированный по ВОЗРАСТАНИЮ массив. Если вывести его с конца получишь ответ на задачу
во второй задаче надо вручную отсортировать массив

на С# это выглядит примерно так:


int temp1 = 0;
for (int i = 0; i < c.Count; i++)
{
j = i;
temp1 = (int)c[i];
while (j > 0 && temp1 < (int)c[j - 1])
{
c[j] = c[j - 1];
j--;
}
c[j] = temp1;
}

на выходе массив с упорядоченный по возрастанию

более подробно про сортировку можно прочитать здесь: http://rsdn.ru/article/alg/sort.xml
в моих примерах используется сортировка вставками

Если будет совсем туго пиши, что-нибудь придумаю чтобы тебе помоч. [Ответ]
X0R 23:07 25.05.2007
Первая
uses
crt;
const
max = 30;
var
s : string;
mas : array[1..max] of string[max];
i, j, z : integer;
begin
ClrScr;
z := 1;
ReadLn(s);
for i := 1 to Length(s) do
if s[i] <> ' ' then
mas[z] := mas[z] + s[i]
else
z := z + 1;
for i := 1 to z do
for j := 1 to z - i do
if Length(mas[j]) < Length(mas[j + 1]) then
begin
s := mas[j];
mas[j] := mas[j + 1];
mas[j + 1] := s;
end;
for i := 1 to z do
WriteLn(mas[i]);
ReadLn;
end. [Ответ]
X0R 23:23 25.05.2007
Вторая
uses
crt;
const
max = 10;
var
mas : array[1..max] of integer;
i, j, z, tmp : integer;
function cmp(a, b : integer) : boolean;
begin
if z = 1 then
if a > b then cmp := true
else cmp := false
else
if a > b then cmp := false
else cmp := true;
end;
begin
ClrScr;
for i := 1 to max do
begin
Write('mas[', i, '] : ');
ReadLn(mas[i]);
end;
WriteLn('[1] по возрастанию');
WriteLn('[2] по убыванию');
ReadLn(z);
ClrScr;
for i := 1 to max do
Write(mas[i], ' ');
WriteLn;
if z > 2 then
begin
WriteLn('Сортировка по возрастанию');
z := 1;
end;
for i := 1 to max do
for j := 1 to max - i do
if cmp(mas[j], mas[j + 1]) then
begin
tmp := mas[j];
mas[j] := mas[j + 1];
mas[j + 1] := tmp;
end;
for i := 1 to max do
Write(mas[i], ' ');
ReadLn;
end. [Ответ]
jin666 10:40 26.05.2007
alex_bas, X0R, спсибо большое [Ответ]
Вверх