Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизЗадачи по Паскалю Найти похожие ветки
← →
Bond (2004-05-08 10:28) [0]Люди помогите пожалуйста решить задачи по Паскалю:
1. Описать функцию count(s), подсчитывающую общее количество знаков "+" , "-" и "*" , входящих в строку S.
2. Описать функцию, определяющую во веденной строке символ с минимальным кодом.
3. Ввести массив целых чисел, вывести числа в следующем порядке: сначала отрицательные, потом положительные.
4. Ввести символ, если он находится в интервале от "0" до "9" , то вывести его код, иначе вывести 5 предыдущих символов.
5. Составить программу вычисления произведения минимальных элементов строк матрицы A(M,N).
6. Составить программу, вставляющую после буквы "К" слог "КВА" , если после неё стоит точка или запятая.
7. Соствить программу для вычисления суммы элементов в каждом столбце матрицы A(M,N).
← →
begin...end © (2004-05-08 10:47) [1]Так. Коммерческую конференцию ещё не открыли?
← →
KilkennyCat © (2004-05-08 11:14) [2]
> begin...end © (08.05.04 10:47) [1]
вроде еще нет :)
Но можно и бесплатно ответить:
Описание функции Count(s).
Данная функция предназначена для подсчета общего количества знаков "+", "-" и "*", входящих в заданную строку. В случае отсутствия этих символов возвращает ноль.
И т.д.
Уважаемый Bond! Когда пишут "помогите..." то вероятно, имеется ввиду совместная работа. А Вы вроде как просто просите решить за Вас все. Приведите Ваш код, или хотя бы соображения, как Вы собираетесь решать эти задачи. В этом случае я с удовольствием помогу Вам.
← →
Real © (2004-05-08 11:45) [3]если с такими задачами не научитесь справлятся, советую вообще все бросить. А то через пару лет - будете здесть просить чтобы вам безвоздмездно курсовые писали?
← →
Bond (2004-05-08 13:02) [4]
> Уважаемый Bond! Когда пишут "помогите..." то вероятно, имеется
> ввиду совместная работа. А Вы вроде как просто просите решить
> за Вас все. Приведите Ваш код, или хотя бы соображения,
> как Вы собираетесь решать эти задачи. В этом случае я с
> удовольствием помогу Вам.
Ну хоршо я вот тут подумал над 3-ей задачей...но что все равно не получается:
program chisla;
var a:array [1..5] of integer; i,otric,pol: integer;
begin
for i:=1 to 5 do begin
writeln("Zadaite"," ",i," "," chislo -");
readln(a[i]);
end;
writeln("Byl zadan massiv:");
for i:=1 to 5 do write(a[i]," ");
writeln;
otric:=0;
if a[i]<0 then for i:=1 to 5 do otric:=a[i];
writeln("Otricatelnye chisla: ",otric);
pol:=0;
if a[i]>0 then for i:=1 to 5 do pol:=a[i];
writeln("Polojitelnye chisla: ",pol);
readln;
end.
← →
Bond (2004-05-08 13:03) [5]
> Описание функции Count(s).
>
> Данная функция предназначена для подсчета общего количества
> знаков "+", "-" и "*", входящих в заданную строку. В случае
> отсутствия этих символов возвращает ноль.
А вы не могли бы привести пример?
← →
KilkennyCat © (2004-05-08 13:15) [6]
program chisla;
var a : array [1..5] of integer;
i, otric, pol : integer;
begin
for i := 1 to 5 do begin
writeln("Zadaite"," ",i," "," chislo -");
readln(a[i]);
end;
writeln("Byl zadan massiv:");
for i:=1 to 5 do write(a[i]," ");
writeln;
а вот здесь цикл неверен:
otric:=0;
if a[i]<0 then for i:=1 to 5 do otric:=a[i];
writeln("Otricatelnye chisla: ",otric);
pol:=0;
if a[i]>0 then for i:=1 to 5 do pol:=a[i];
writeln("Polojitelnye chisla: ",pol);
readln;
end.
надо проверку делать В ЦИКЛЕ, а у Вас перед циклом... правильно:
otric:=0;
write("Otricatelnye chisla:");
for i := 1 to 5 do begin
if a[i] < 0 then begin
otric:=a[i];
write(otric, " ");
end;
end;
соответсвенно и с положительными. И еще: поскольку элемент массива также может выводится на печать, как и переменная, то от pol и otric можно избавиться:
write("Otricatelnye chisla:");
for i := 1 to 5 do if a[i] < 0 then write(a[i], " ");
← →
Андрей Сенченко © (2004-05-08 13:15) [7]Bond (08.05.04 13:03) [5]
Для написания функции Count(s) Вам понадобятся :
1. 2 переменных типа String
2. Функция Pos()
3. Процедура Copy() ити Delete()
Вариант, который Вам могут предложить Мастера ( замотатетесь правда потом защищать свое домашнее задание ) - воспользоваться функцией StringReplace и переменной типа TStringList или просто методом TStringList.DelimitedText.
Букварь в зубы и вперед.
← →
OlegGashev © (2004-05-08 13:17) [8]
program chisla;
{$APPTYPE CONSOLE}
const ARRAY_SIZE=5;
var
a:array [1..ARRAY_SIZE] of integer;
i:integer;
begin
// ×èòàåì ìàññèâ
for i:=1 to ARRAY_SIZE do
begin
write("Zadaite"," ",i," "," chislo:");
readln(a[i]);
end;
//Âûâîäèì ìàññèâ
writeln("Byl zadan massiv:");
for i:=1 to ARRAY_SIZE do
write(a[i]," ");
writeln;
// Âûâîäèì îòðèöàòåëüíûå ÷èñëà
writeln("Otricatelnye chisla:");
for i:=1 to ARRAY_SIZE do
if a[i]<0 then
write(a[i]," ");
writeln;
// Âûâîäèì ïîëîæèòåëüíûå ÷èñëà
writeln("Polojitelnye chisla:");
for i:=1 to ARRAY_SIZE do
if a[i]>0 then
write(a[i]," ");
readln;
end.
← →
Gero © (2004-05-08 13:18) [9]Блин, вобще думать не хотят.
← →
KilkennyCat © (2004-05-08 13:21) [10]
> Андрей Сенченко © (08.05.04 13:15) [7]
> Bond (08.05.04 13:03) [5]
>
> Для написания функции Count(s) Вам понадобятся :
> 1. 2 переменных типа String
> 2. Функция Pos()
> 3. Процедура Copy() ити Delete()
а зачем так усложнять-то?For i := 1 to Length(string) do if string[i] then...
← →
Anatoly Podgoretsky © (2004-05-08 13:26) [11]А может стоить просто купить диплом, пользы больше.
← →
Андрей Сенченко © (2004-05-08 13:27) [12]А вы не могли бы привести пример?
Шаблон примерно такойfunction GetSignCount(s1 : string) : integer;
// предполагается что функция получает на входе начальную
// строку и возвращает результат в виде целого числа.
var
s2 : string; // понадобится потом - корёжить исходную строку.
begin
GetSignCount := 0; // Предустанавливаем результат функции
If Length (s1) < 1 Then EXIT // Проверяем - есть ли во входной
// строке хоть что-то и выходим
// если нет. Чтобы не делать
// лишней работы.
If ( Pos("+",s1) ) = 0 // Проверяем наличие искомых
And ( Pos("*",s1) ) = 0 // Символов в строке.
And ( Pos("-",st) ) = 0
Then EXIT; // Если не нашли - выходим
...
end;
Дальше сами уж разбрайтесь
← →
Андрей Сенченко © (2004-05-08 13:28) [13]KilkennyCat © (08.05.04 13:21) [10]
а зачем так усложнять-то?
Чтобы хоть чему то научился
← →
nikkie © (2004-05-08 14:26) [14]>Шаблон примерно такой
>Чтобы хоть чему то научился
не знаю, чему из такого можно научиться...
разве что тому, как не надо делать.
зато плюс - препод будет уверен, что сделал сам.
← →
Bond (2004-05-08 15:30) [15]Может кто-нибудь подскажет как делать 6-ую задачу?
← →
OlegGashev © (2004-05-08 15:31) [16]Андрей Сенченко © (08.05.04 13:27) [12]
А зачем 3 условия делать?
Достаточно a:array [1..ARRAY_SIZE] of char=("+","-","*");
и пробижаться по этому циклу с strscan.
← →
KilkennyCat © (2004-05-08 16:09) [17]
> Bond (08.05.04 15:30) [15]
> Может кто-нибудь подскажет как делать 6-ую задачу?
Гм... вообще-то, после выполнения первых пяти, шестая не вызовет проблем, абсолютно....
← →
Андрей Сенченко © (2004-05-08 16:25) [18]OlegGashev © (08.05.04 15:31) [16]
Можно и через Set of. Можно и без array вообще, а просто дать string с нужными символами.
Студенческая задача. Зачем плодить потенциальные вопросы ?
nikkie © (08.05.04 14:26) [14]
зато плюс - препод будет уверен, что сделал сам.
На этот плюс и нужно ориентироваться. Мы добиваемся того чтобы человек смог сдать или научиться программировать ?
Для себя и я бы делал совсем по-другому.
← →
OlegGashev © (2004-05-08 17:05) [19]Зачем плодить потенциальные вопросы ?
Чобы автор вопроса видел всю картину задания и знал механизм её решения. Давай абстрагирую несколько задач для общего случая.
1. Описать функцию count(s), подсчитывающую общее количество целых чисел из массива a , входящих в массив b.
3. Ввести массив целых чисел. Отсортировать его по знаку, без единого прохода по массиву.
6. Составить программу, вставляющую после элемента a в массиве, значения c,d,e , если после него стоит 18 и 73.
Механизм решения абсолютно тот же.
← →
begin...end © (2004-05-08 17:06) [20]
> [15] Bond (08.05.04 15:30)
> Может кто-нибудь подскажет как делать 6-ую задачу?
program N6;
var
S: String;
I: Integer;
begin
Write("Введите строку: ");
ReadLn(S);
for I := 1 to Length(S) - 1 do
if (S[I] = "К") and ((S[I + 1] = ".") or (S[I + 1] = ",")) then
Insert("КВА", S, I + 1);
Write("Результат: ", S);
ReadLn;
end.
Но есть одно "но": если "К." или "К," находится в самом конце строки, то Insert не сработает. Так что тебе нужно немного всё это доработать.
← →
Андрей Сенченко © (2004-05-08 17:27) [21]OlegGashev © (08.05.04 17:05) [19]
По 6-му не совсем понял ... абстрагированно задача выглядит на мой взгляд так :
6. Составить программу, вставляющую после элемента a в массиве, значениe b, если после элемента a стоит элемент с.
Общее опять же решение задачи 1 я бы сделал таким :
function count(str,substr : string) : integer;
var
i,j : integer;
begin
count := 0;
for i := 0 to length(substr) do
for j := 0 to length(str) do
if str[j] := substr[i] then inc(count);
end;
P.S.
С Днем Рождения кстати ...
← →
Romkin © (2004-05-08 17:43) [22]Мдя. Тихий ужас. Вопрос: задачки на Delphi должны быть решены, или на Паскале? И на какой версии? Ведь способ будет отличаться иногда, в VCL гораздо больше функций, хороших и разных ;)
← →
Андрей Сенченко © (2004-05-08 17:49) [23]Subj - Задачи по Паскалю
вроде как от этого танцуем
← →
OlegGashev © (2004-05-08 17:57) [24]Андрей Сенченко © (08.05.04 17:27) [21]
Первая задача по другому в принципе и не решается.
← →
Romkin © (2004-05-08 18:17) [25]OlegGashev © (08.05.04 17:57) [24] Если бы :))) Я могу предложить пяток совершенно других решений. Да и проведи опыт, дай эту задачу пяти разным начинающим (!) программистам, и пусть они честно ее решат. Уверяю - будешь удивлен.
У меня есть приятель, так он когда-то тоже программирование учил, в институте. ТАк у него программа решения линейных уравнений методом Гаусса на фортране состояла где-то из пяти процедур и занимала, кажется, ровно 273 строки (Не считая ввода-вывода матрицы!)
← →
KilkennyCat © (2004-05-08 18:28) [26]
> OlegGashev © (08.05.04 17:57) [24]
> Андрей Сенченко © (08.05.04 17:27) [21]
>
> Первая задача по другому в принципе и не решается.
вот вам способ...
напоминаю 1. Описать функцию count(s), подсчитывающую общее количество знаков "+" , "-" и "*" , входящих в строку S.
function count(s) : integer;
begin
result := 0;
while length(s) > 0 do begin
if (s[1] = "+") or (s[1] = "-") or (s[1] = "*") then inc(result);
s := copy(s,2, length(s) -1);
end;
end;
ни одной дополнительной переменной, всего один цикл, хотя строку убил :)
← →
OlegGashev © (2004-05-08 18:31) [27]KilkennyCat © (08.05.04 18:28) [26]
Я говорю для общего случая, а не для "+" , "-" и "*".
← →
KilkennyCat © (2004-05-08 18:42) [28]OlegGashev © (08.05.04 18:31) [27]
я понял, но общее решение - это инициатива, а она - наказуема :)
для общего решения мне потребуется одна переменная, причем, любого типа, без разницы.
← →
Romkin © (2004-05-08 18:47) [29]KilkennyCat © (08.05.04 18:42) [28]
function countPlus(s: string) : integer;
var
i: integer;
begin
countPlus := 0;
for i := 1 to Length(S) do
if s[1] in ["+", "-", "*"] then
inc(countPlus);
end;
Для общего решения - объяви переменную-множество, туда и пхать :)
PS. в TP6 Result нет...
← →
Anatoly Podgoretsky © (2004-05-08 18:47) [30]KilkennyCat © (08.05.04 18:28) [26]
В Паскале есть множества!
← →
KilkennyCat © (2004-05-08 18:56) [31]хе... ну забыл... LMD мне два раза :)
← →
nikkie © (2004-05-08 19:01) [32]>ровно 273 строки
ровнее не придумаешь :)))
← →
Bond (2004-05-08 19:24) [33]Всем большое спасибо...
← →
Bond (2004-05-08 20:09) [34]Тут правда один вопросик возник: Как зная элемент массива определить его индекс (a[1], a[2] и т.д)?
← →
begin...end © (2004-05-08 20:25) [35]
> [34] Bond (08.05.04 20:09)
> Тут правда один вопросик возник: Как зная элемент массива
> определить его индекс (a[1], a[2] и т.д)?
Путём сравнения образца с элементами массива в цикле.
P. S. Ну ты даёшь. Неужели решения, которые уже приведены, не натолкнули тебя на мысль?
← →
Palladin © (2004-05-08 21:39) [36]
> begin...end © (08.05.04 20:25) [35]
Про какие мысли ты ведешь речь? Ему решения нужны, а не мысли.
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.04 c