Спасите кто-нибудь от циклов и массивов

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Спасите кто-нибудь от циклов и массивов

Сообщение Fabian Fierce » 18.05.2011 00:25:24

Ребят, помогите замученной девушке! Уже вторую ночь подряд решаю все задачки по паскалю за семестр - мозги кипят, тупею =D

1. Составить программу возведения вещественного числа А в степень с натуральным показателем N.
2. Проверить, встречается ли число К в массиве A[10].

:?:
Fabian Fierce
незнакомец
 
Сообщения: 1
Зарегистрирован: 18.05.2011 00:15:42

Re: Спасите кто-нибудь от циклов и массивов

Сообщение СерП » 18.05.2011 03:55:06

А в первую что-нибудь решить удалось? Если да, то какой же простоты были задачки?

1. Если "по-детски", то примерно так:
Код: Выделить всё
program power1;

var
  A, Res: Double;
  N: Word;
  i: Integer;

begin
  writeln ('Программа возведения вещественного числа в степень с натуральным показателем');
  write ('Введите основание (вещественное число): '); readln (A);
  write ('Введите показатель (натуральное число): '); readln (N);
  Res:= 1;
  for i:= 1 to N do
    Res:= Res * A;
  writeln ('Результат: ', Res);
end.

Вывод, правда, будет не очень хороший - научный формат для любых чисел. Улучшенный вариант:
Код: Выделить всё
program power1;

uses Sysutils;

...

begin

...

  writeln ('Результат: ', FloatToStr (Res));
end.

Для вывода выбирается самая короткая запись. В частности, если результат де-факто целочисленный, то он и будет выведен как целочисленный.

Но при вводе возможны ошибки (например, случайно нажатая буква), из-за которых программа просто вылетит. Их можно отследить с помощью перехвата исключений. Скажем так:
Код: Выделить всё
program power2;

{$MODE Objfpc}{$H+}{$R+}

uses Sysutils;

var
  A, Res: Double;
  N: Word;
  i: Integer;
  IsTrueNumber: Boolean;

begin
  writeln ('Программа возведения вещественного числа в степень с натуральным показателем');
  IsTrueNumber:= False;
  while not IsTrueNumber do
    begin
      IsTrueNumber:= True;
      try
        write ('Введите основание (вещественное число): '); readln (A);
      except
        writeln ('Вы ввели ошибочное число, повторите ввод');
        IsTrueNumber:= False;
      end;
    end;
  IsTrueNumber:= False;
  while not IsTrueNumber do
    begin
      IsTrueNumber:= True;
      try
        write ('Введите показатель (натуральное число): '); readln (N);
      except
        writeln ('Вы ввели ошибочное число, повторите ввод');
        IsTrueNumber:= False;
      end;
    end;
  Res:= 1;
  for i:= 1 to N do
    try
      Res:= Res * A;
    except
      writeln ('Результат - слишком большое или слишком маленькое число');
      halt (0);
    end;
  writeln ('Результат: ', FloatToStr (Res));
end.

Здесь же учтено, что результат вычислений может выйти за границы допустимых значений.

2. В задании не сказано откуда берётся массив и какие числа содержит. Для простоты взят массив целых чисел, заданый как типизированная константа. Проверяемое число вводится пользователем.
Код: Выделить всё
program numinarr;

const
  A: array [1..10] of Integer = (2, 34, -76, 12, 45, 97, -102, 50, 14, 200);

var
  K, i: Integer;

begin
  writeln ('Программа поиска числа в массиве');
  write ('Введите число: '); readln (K);
  for i:= 1 to 10 do
    if A[i] = K then
      begin
        writeln ('Число есть в массиве');
        halt (0);
      end;
  writeln ('Числа нет в массиве');
end.

При необходимости можно сделать проверку вводимого значения - аналогично первому заданию.
СерП
новенький
 
Сообщения: 13
Зарегистрирован: 04.12.2010 01:20:10

Re: Спасите кто-нибудь от циклов и массивов

Сообщение informat » 18.05.2011 08:42:45

От циклов и массивов спасения нет и не будет! :D
Это самые основные моменты программирования и вообще аналитического склада ума.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Brainenjii » 18.05.2011 08:48:16

Массивы - зло ^_^ Списки решают :-D
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Спасите кто-нибудь от циклов и массивов

Сообщение vada » 18.05.2011 09:43:17

Массивы удобнее, списки быстрее. :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Nik » 18.05.2011 10:20:41

vada писал(а):Массивы удобнее, списки быстрее. :)

Массивы лучше подходят для обучения новичков. Списки в этом плане посложнее будут.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Vadim » 18.05.2011 14:53:50

СерП
Вы подаёте дурной пример, что можно весь семестр ничего не учить - пить пиво, скакть по найтклабам, а перед началом сессии зайти на сайт freepascal.ru и там добрый дядя СерП бесплатно за лоботряса всё сделает. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Mr.Smart » 18.05.2011 15:08:27

Vadim
Я думаю здесь сыграл фактор
Fabian Fierce писал(а):... помогите ... девушке! ...


читать не рекомендую - разрушает мозг! :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Спасите кто-нибудь от циклов и массивов

Сообщение informat » 18.05.2011 15:31:21

vada писал(а):Массивы удобнее, списки быстрее. :)

Это когда они стали быстрее?
Быстрее чем из массива данные получить можно только из переменной.
Или Вы частный случай рассматриваете?
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Maxizar » 18.05.2011 17:05:03

Соглашусь с Vadim, вот, что мы сейчас сделали? и те кто привел решение и те кто приняли участие в обсуждении... Ведь вопроса конкретного не было не так ли?... была поставлена задача, а вопроса КОНКРЕТНОГО не было. Fabian Fierce получил решение, завтра получит зачет и все, мы никогда его больше не увидим тут. Ну если только ему не зададут еще пару задач, или он доживет до следующего курса... Он умнее от этого не стал, даже наоборот он стал наглее... А вот если он посидел, почитал, погуглил, кто знает я не говорю, что из него Великий программист вырастит, но он(она - тут я не уверен) как минимум расширили свой кругозор, да пускай до переменных, до массива НО это уже что-то... А потом, мы же едем в автобусе, видим таких "Крутых" и думаем откуда у них столько времени, когда они учатся...
Вот если бы Fabian Fierce задал вопрос как там собрать FPC тут вообще претензий нету, человеку нужно помочь, но решать задачу :cry: :cry:

PS. Я не говорю, что нет форс мажорных обстоятельств, когда реально нужна помощь, но тут... у человека 1 сообщение. Задание из методички. И время то какое - сессия....
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Спасите кто-нибудь от циклов и массивов

Сообщение СерП » 18.05.2011 21:36:26

Критику понимаю, но принимаю только частично.

Есть люди, нуждающиеся настолько, что просят милостыню. Кто-то из не нуждающихся смекает, что это лёгкий заработок, и прикидывается нищим. В отношении "подавать - не подавать" есть две чистые стратегии: подавать всегда, исходя из того, что лучше ошибиться и подать обманщику, чем не подать нуждающемуся, и не подавать никогда. Второе фактически означает "лучше не подать нуждающемуся, чем подать обманщику", но вслух об это стараются не говорить, поскольку звучит не очень.

Как оценить виртуальную девушку, действительно у неё форс-мажорные обстоятельства или она просто не хочет учиться? Устроить допрос: сколько времени вы посвятили предмету? Если мало, то почему? Если много, то почему не успеваете? Профильный у вас предмет программирование или так, "потому что есть"? Собираетесь связать свою жизнь с программированием или нет? Будет для вас плюсом вакансии наличие в должностных обязанностях разработки программного обеспечения? И как проверить ответы?

У нас в институте курс программирования включал Паскаль и, кажется, FoxPro. Сейчас уже не помню. Первое меня интересовало, второе нет. Курсовая, соответственно, состояла из двух частей. Чтобы не было большой нагрузки, её сдавали по двое. Мы с сокурсницей договорились, что паскалевскую часть пишу я, а по базе данных она просит написать своего знакомого. (На самом деле там было сложнее, но не суть важно). Хорошо или плохо, что часть курсовой за меня написал человек, которого я в глаза не видел, и что FoxPro во время обучения прошёл для меня стороной (и скорее всего по жизни пройдёт)? Что вы можете об этом сказать, практически не зная меня?

И потом, посмотрите на ситуацию с другой стороны. Я давно не был на сайте, соскучился, зашёл. Увидел на форуме новую тему, заинтересовался. Прочитав задания, поначалу подумал, что это издевательство. Но всё равно решил, извините за каламбур, решить. И не зря заинтересовался. Поначалу программа (та, которая с проверками), постоянно вываливалась с исключением на втором try-except. Так и эдак пробовал (пробовал!) - не получается. Полез в литературу, выяснил, что нужно включить проверку диапазона целочисленных значений, которая по умолчанию отключена. Причём я ведь когда-то это знал, но забыл. Вот так стал помогать другому, и освежил свои знания. Это плохо? Главное, может быть, что я себе помог.

Человеческие отношения, в том числе помощь другому человеку, сложная штука. Я не знаю конкретной стратегии, пригодной на все случаи жизни (если кто-то знает - поделитесь). И фактически в жизни использую смешанную: иногда подаю, иногда (и даже чаще) не подаю, иногда помогаю в таких вот случаях, иногда (и даже чаще) не помогаю.

Как-то так, хотя "это не вокал, это эскиз к вокалу".
СерП
новенький
 
Сообщения: 13
Зарегистрирован: 04.12.2010 01:20:10

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Vadim » 19.05.2011 05:04:59

СерП писал(а):есть две чистые стратегии: подавать всегда, исходя из того, что лучше ошибиться и подать обманщику, чем не подать нуждающемуся, и не подавать никогда. Второе фактически означает "лучше не подать нуждающемуся, чем подать обманщику"

Сии стратегии здесь не подходят, даже приблизительно. :) И вот почему:
Fabian Fierce писал(а):Уже вторую ночь подряд решаю все задачки по паскалю за семестр...

Здесь прямо и недвусмысленно написано, что существо впервые село решать задачи, хотя семестр уже практически кончился. Чем оно занималось ранее? Училось? Отнюдь. Если бы училось, то задачки были бы решены. Допускаю, что вопросы массивов - вопросы сложные и малопонятные. И сразу же возникает интересный вопрос - почему "малопонятность массивов" выяснилось непосредственно перед началом сессии?
Как видите, элементарная логика показывает, что перед нами отнюдь не нуждающееся существо, а самый обычный лоботряс, который учится не очет и единственное его желание - получить корочки от образования. Этому же служит подтверждением формулировка вопроса - существо не пишет, что ему непонятно, существо пишет - сделайте ЗА меня.

Добавлено спустя 12 минут 35 секунд:
По поводу тезиса "нужно-не нужно" и "пригодится в будущем или нет".
Подход совсем уж неправильный. ;) Высшее образование включает в себя определённые аттрибуты. Если их нет - нет и высшего образования. Ваш пример показывает, что Вы наплевательски подошли к вопросу изучения работы с базами данных (без обид, я сужу исключительно по Вашим словам ;) ). Теперь, как программист, Вы вызываете большие сомнения. :) Но это не важно. Вернёмся к образованию. Если человек отказывается изучать те или иные аттрибуты образования, зачем ему оно вообще? Рассуждать сейчас, что может понадобится или не понадобтся в будущем - абсурд. Я, к примеру, одно время довольно долго искал работу. Программирование в Паскале я знаю, а вот в С\С++, увы, не силён. Оттого и мои проблемы возникли. А ведь тоже думал когда то - мне это не нужно, никогда в жизни я этим заниматься не буду... Как выяснилось - действительно "не буду", только причина совсем другая - дурак был круглый и думал не о будущем, а только о своих удовольствиях.
:)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Спасите кто-нибудь от циклов и массивов

Сообщение скалогрыз » 19.05.2011 05:39:58

2 СерП
замечания по решению :D

поправленный вариант
задачка №1
Код: Выделить всё
program power1;

var
  A, Res: real;
  N: Word;
  i: Integer;

begin
  writeln ('Programma vodvedenia veshestvennogo chisla v stepen');
  write ('Veshestvennoe chislo A '); readln (A);
  write ('Stepen N: '); readln (N);
  Res:= 1;
  for i:= 1 to N do
    Res:= Res * A;
  writeln ('Resultat: ', Res);
end.


но строчку с результатом, можно написать, как
Код: Выделить всё
writeln ('Resultat: ', Res:1:3);

и будет красиво!

задачка №2 (возможное решение)
Код: Выделить всё
program numinarr;

var
  A: array [1..10] of Integer;
  K, i: Integer;
  n : Integer;

begin
  writeln('zadayte massiv is 10 chisel');
  for i:=1 to 10 do begin
     readln(k);
     a[i]:=k;
  end;
  write ('vvedite chislo k: '); readln (K);
  n:=0;
  for i:= 1 to 10 do
    if A[i] = K then
      n:=1;
  if i>0 then writeln ('Chislo est v massive')
  else writeln ('Chisla net v massive');
end.


задачка №2 (решение для учителя информатики)
Код: Выделить всё
program numinarr;

var
  A: array [1..10] of Integer;
  K, i: Integer;
begin
  writeln('zadayte massiv is 10 chisel');
  for i:=1 to 10 do begin
     readln(k);
     a[i]:=k;
  end;
  write ('vvedite chislo k: '); readln (K);
  i:=1;
  while (i<=10) and (a[i]<>k) do
    inc(i);
  if i<=10 then writeln ('Chislo est v massive')
  else writeln ('Chisla net v massive');
end.




1) скорее всего программирование ведётся на Borland Pascal, в лучшем случае на Delphi. Нужно сразу избавлятся от коде от конструкций: {$MODE Objfpc}{$H+}{$R+}
2) опять же. даже если и делфи, то в Borland совместимом режиме =) - никаких русских букв (ах не DOS!). Тип double или single не преподаются. real - решает!
3) конструкции типа try..finally. Многие дипломы защищают не зная об их существовании - в топку! =)
4) uses - в топку!

однако любой из перечисленных пунктов может быть удалён :D
а правило всегда одно: проще - лучше!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Спасите кто-нибудь от циклов и массивов

Сообщение Putnick » 19.05.2011 09:36:58

Кстати, по поводу "спасения от циклов":
Код: Выделить всё
var
o:real;
s:integer;
r:real;
begin
  WriteLn('Укажите число');
  ReadLn(o);
  WriteLn('Укажите степень');
  ReadLn(s);
  if (o=0) and (s=0) then WriteLn('0^0 - Неопределенность')
  else begin
    if o=0 then r:=0 else begin
      r:=exp(s*ln(abs(o)));
      if (o<0) and ((s mod 2)=1) then r:=-r;
    end;
    WriteLn(o,'^',s,'=',r)
  end
end.

И, заметьте, ни единого цикла. :wink: Мы спасены!
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

Re: Спасите кто-нибудь от циклов и массивов

Сообщение vada » 19.05.2011 10:05:15

И, заметьте, ни единого цикла. Мы спасены!


А теперь вторую задачу без массивов :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru