Люди добрые, помогите решить задачи по паскалю.
читать дальше1)Задана фраза. Распечатать все слова этой фразы в столбик в алфавитном порядке.
2)Дано ошибочно написанное слово «роцессорп». Путем сдвига букв получить слово процессор.
3)В n колхозах выращивают некоторые с\х культуры. Из имеющегося перечня определить культуры:
а) возделываемые во всех колхозах;
б) возделываемые только в некоторых колхозах.
Заранее спасибо))
Program ee;
Uses Crt;
Var i, counter : integer;
slovo, s : string;
key : char;
Procedure SdvigSlova(var slovo : string);
Var l : byte;
bukva : char;
Begin
l:=length(slovo);
bukva:=slovo[l];
For i:=l DownTo 2 do begin
slovo[i]:=slovo[i-1];
end;
slovo[1]:=bukva;
End;
BEGIN
ClrScr;
Write('Введите слово: ');
ReadLn(slovo);
s:=slovo;
counter:=0;
WriteLn;
Repeat
SdvigSlova(slovo);
Inc(counter);
WriteLn('Может так - ', slovo, '? (y/n)');
Repeat
key:=ReadKey;
Until( (pos(key, 'yYnNнНтТ')) > 0 );
{ WriteLn; }
Until( pos(key, 'yYнН') > 0 );
Writeln;
WriteLn('Было - ', s);
WriteLn('Стало - ', slovo);
WriteLn('Перемещений - ', counter);
ReadKey;
END.
Вот с сортировкой по алфавиту сложнее. Надо либо использовать номера в таблице ASCII (ord(char);), либо создать константу в которой будет строка со всеми буквами алфавита и используя функцию pos определять, что должно быть первее..
3. не понял задачу) можно подробнее?
3 задачу я сама с трудом поняла. Если не ошибаюсь, нужно использовать множества.
1. Crazy Wizard сорри но Вот с сортировкой по алфавиту сложнее.... есть бред
Program SubStrings;
Uses ... //хз
my_string, t: String;
my_words: array[1..50] of String;
i, j, k: integer;
b: boolean;
begin
ClrScr;
Write('Введите слово: ');
ReadLn(my_string);
j:=1;
b:= false; //для учета нескольких пробелов подряд
//разбор на слова
for i:=1 to length(my_string) do
begin
if my_string[i] <> ' ' then
my_words[j] := my_words[j]+my_string[i];
else if b == false then
begin
j := j + 1;
b := true;
end;
end;
//
//сортировка пузырьком
for i := j - 1 downto 1 do
for k := 1 to i do
if a[k] > a[k+1] then
begin
t := a[k];
a[k] := a[k+1];
a[k+1] := t;
end;
//
//вывод
for i := 1 to j do
writeln(my_words[i]);
end.
ограничения: первый и последний символы не должны быть пробелами
поправьте если не прав
if my_string[i] <> ' ' then
my_words[j] := my_words[j]+my_string[i];
else if b == false then
должно быть:
if my_string[i] <> ' ' then
begin
my_words[j] := my_words[j]+my_string[i];
b := false;
end;
else if b == false then
if my_string[i] <> ' ' then
begin
my_words[j] := my_words[j]+my_string[i];
b := false;
end;
else if b == false then
выделенные символы явно лишние.
Что-то они не особо выделились. В общем перед else точку с запятой не ставят и в паскале сравнение, это 1 символ "=".
> "сортировка пузырьком"?
каждый элемент сравнивается с соседним. Если 1 больше второго, они меняются местами и первый сравнивается дальше. Если больше второй, то начинаем сравнивать его со следующем. Ну или как то так))
Загадка природы описание алгоритма тут
program kolhoz;
uses .....
const differential_unique_culture = 1;
type TKolhoz = record
name: string[50];
culture: array[1..50] of string;
end;
type TCulture = record
name: string;
kolhozs: array[1..50] of string;
kolhozs_number: integer;
cost: integer;
end;
kolhoz_list: array[1..50] of TKolhoz;
kolhoz_quantity: integer;
common_culture, different_culture: array[1..50] of TCulture;
culture_list: array[1..150] of TCulture; /* возможно мало.. смотря сколько культур может выращивать один колхоз и сколько колхозов всего */
i, j, k, s, x: integer;
flag: boolean;
begin
//ввод
//сама
//
i := 1; s := 0;
while kolhoz_list[i].name <> '' and i <= 50 do
begin
j := 1;
while kolhoz_list[i].culture[j] <> '' and j <= 50 do
begin
flag := false;
k := 1;
while k <= s and flag = false do
begin
if kolhoz_list[i].culture[j] = culture_list[k].name then
begin
inc(culture_list[k].cost);
inc(culture_list[k].kolhozs_number);
x := culture_list[k].kolhozs_number;
culture_list[k].kolhozs[x] := kolhoz_list[i].name;
flag := true;
end;
inc(k);
end;
if flag = false then
begin
inc(s);
culture_list[s].name := kolhoz_list[i].culture[j];
culture_list[s].cost := 1;
culture_list[s].kolhozs_number := 1;
culture_list[s].kolhozs[1] := kolhoz_list[i].name;
end;
inc(j);
end;
inc(i);
end;
kolhoz_quantity := i - 1;
j := 0; k := 0;
for i := 1 to s do
begin
if culture_list[i].cost = kolhoz_quantity then
begin
inc(j);
common_culture[j] := culture_list[i];
end;
if culture_list[i].cost = differential_unique_culture then
begin
inc(k);
different_culture[j] := culture_list[i];
end;
end;
//вывод
// сама
//
end.
Пропустила.. Да-да, только со словом процессор, все намного проще.