Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
       // &#215;&#232;&#242;&#224;&#229;&#236; &#236;&#224;&#241;&#241;&#232;&#226;
       for i:=1 to ARRAY_SIZE do
       begin
               write("Zadaite"," ",i," "," chislo:");
               readln(a[i]);
       end;

       //&#194;&#251;&#226;&#238;&#228;&#232;&#236; &#236;&#224;&#241;&#241;&#232;&#226;
       writeln("Byl zadan massiv:");
       for i:=1 to ARRAY_SIZE do
               write(a[i]," ");
       writeln;

       // &#194;&#251;&#226;&#238;&#228;&#232;&#236; &#238;&#242;&#240;&#232;&#246;&#224;&#242;&#229;&#235;&#252;&#237;&#251;&#229; &#247;&#232;&#241;&#235;&#224;
       writeln("Otricatelnye chisla:");
       for i:=1 to ARRAY_SIZE do
               if a[i]<0 then
                       write(a[i]," ");
       writeln;

       // &#194;&#251;&#226;&#238;&#228;&#232;&#236; &#239;&#238;&#235;&#238;&#230;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#229; &#247;&#232;&#241;&#235;&#224;
       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.57 MB
Время: 0.035 c
4-1082308394
8ung
2004-04-18 21:13
2004.05.30
Какое сообщение посылается, при доступе к какой-нибудь дирректори


1-1084779160
Lera
2004-05-17 11:32
2004.05.30
TList.Sort


6-1081490934
Orc
2004-04-09 10:08
2004.05.30
Проверить наличие веб-сервера


8-1079384205
Step[B.M.]
2004-03-15 23:56
2004.05.30
Из TImage в БД без необходимости копирования на диск файла


4-1080283710
Kalishenko Stas
2004-03-26 09:48
2004.05.30
FindFirstChangeNotification для Novell