помогите пож-та решить несколько задач, оч. хочется хорошую оценку в аттестате

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Здесь уже ошибка Bhy4ok'a.

Лишний end и недостающий цикл -); Делай так:

Код: Выделить всё

for i:= 1 to length(s) do if s[i] in c then inc(n);
P.S. и не забудь поменять кодировку (C:=['а'..'я','А'..'Я'];) на DOS.
'end' - не лишний!
торопился т.к. времени мало было и пропустил цикл :)

зы. уже поправил.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

BHy4ok писал(а):'end' - не лишний!
Хе-хе... То есть ты хочешь сказать, что там недостающий begin? -));
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

и вообще, зачем нужно было исправлять код, если я уже его исправил? так сказать, штрихом на экзамене не пользуются.
Ps - но с End'ом ты конечно загнул, и главное, в полном своем сознании-);
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Не загнул, но в сознании. Потому-что первоначально делал не просто 'do', а 'do begin', поэтому использование сдесь 'end' уместно.

Конечно можно было обойтись более упрощенным вариантом, но сделал так.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

На будущее: begin и end используется как обрамбление субпрограммы. А субпрограмма, соответственно, должна состоять из 2 или более операций. Использование begin и end для однооперационных участков кода лишь уменьшит быстродействие программы, увеличит длинну самого кода и осложнит твой алгоритм. (грубо говоря).
В общем, не будем уделять внимание мелким ошибкам.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Начинающая
Сообщения: 15
Зарегистрирован: 16 апр 2007, 15:38

Колядин Максим писал(а):Задача №5:

Код: Выделить всё

var i,a,b: integer;

[B][I][U]function figures_amount[/U][/I][/B](x: integer):integer;
var s: string;
begin
str(x,s);
figures_amount:=length(s);
end;

begin
readln(a);
readln(b);
if (a<0) or (b<0) then exit;
if [U][I][B]figures_amount(a)>figures_amount(b) [/B][/I][/U]then writeln('Кол-во цифр числа A больше чем B');
{проделай это же с "меньше" и "равно"}
readln;
end.
а что это за function figures_amount ? это по школьной программе? мы такого тне проходили...а то будет мне потом)))) скажет,мол, откуда ты это взяла.это ж 5-ый курс института!))))
Аватара пользователя
Начинающая
Сообщения: 15
Зарегистрирован: 16 апр 2007, 15:38

ну вы мужчины блин загнули!!!! что мне терь делать? менять че-то или нет? :confused: :) ;) кто прав то?
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Начинающая писал(а):А что это за function figures_amount ?
По условию задачи было сказано "создать функцию для нахождения количества цифр" - вот я и создал. Скажи ей - "это я функцию для нахождения количества цифр здесь объвила." - вот и всё.
Начинающая писал(а): что мне терь делать? менять че-то или нет? кто прав то?
В какой задаче ты собираешься что-то менять? BHy4ok сделал небольшую ошибочку, я её подправил - теперь все правы.
Вот код:

Код: Выделить всё

type 
Chars = set of char];
writeln('Введите строку: ');
readln(s);
for i:= 1 to length(s) do if s[i] in c then inc(k);
writeln('Русских букв в строке: ',k);
readln;
end. 
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Гы... повеселили меня :)
Ну, во-первых, функция figures_amount вполне сокращается до одной строки:
function figures_amount(x:integer):integer;
begin
figures_amount:=length(str(x));
end;
Во-вторых, в задачке с русскими буквами, думаю, имеется в виду, найти, сколько раз встречается буква А, сколько раз - Б, и т.д.

Код: Выделить всё

var letters:array['А'..'Я'] of integer;
i:byte; s:string;
begin
  for i:=1 to length(s) do
  if s[i] in ['А'..'Я'] then inc(letters[s[i]]);
end.
Естественно, вначале надо обнулить весь массив letters и задать строку s
Со степенью такое решение (для целых чисел) тоже не пройдет, если основание степени будет отрицательным, прога радостно рухнет. Вот нормальный вариант

Код: Выделить всё

function step(x,n:integer):real;
var i:integer;s:real;
begin
  s:=1;
  for i:=1 to abs(n) do s:=s*x;
  if n<0 then s:=1/s;
  step:=s;
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Гы... повеселили меня
Гы... тебя всякая фигня постоянно смешит. Сократил код - молодец, а своим преждесловием ты лишь поднял свою самооценку.
P.S. культурный человек сам себя никогда не хвалит -):
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Ответить