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

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

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

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

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

Сообщение Fabian Fierce »

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

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

:?:
СерП
новенький
Сообщения: 13
Зарегистрирован: 04.12.2010 00:20:10

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

Сообщение СерП »

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

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.

При необходимости можно сделать проверку вводимого значения - аналогично первому заданию.
Аватара пользователя
informat
новенький
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name
Контактная информация:

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

Сообщение informat »

От циклов и массивов спасения нет и не будет! :D
Это самые основные моменты программирования и вообще аналитического склада ума.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Brainenjii »

Массивы - зло ^_^ Списки решают :-D
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

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

Сообщение vada »

Массивы удобнее, списки быстрее. :)
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

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

Сообщение Nik »

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

Массивы лучше подходят для обучения новичков. Списки в этом плане посложнее будут.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Vadim »

СерП
Вы подаёте дурной пример, что можно весь семестр ничего не учить - пить пиво, скакть по найтклабам, а перед началом сессии зайти на сайт freepascal.ru и там добрый дядя СерП бесплатно за лоботряса всё сделает. :)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Сообщение Mr.Smart »

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


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

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

Сообщение informat »

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

Это когда они стали быстрее?
Быстрее чем из массива данные получить можно только из переменной.
Или Вы частный случай рассматриваете?
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

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

Сообщение Maxizar »

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

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

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

Сообщение СерП »

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

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

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

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

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

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

Как-то так, хотя "это не вокал, это эскиз к вокалу".
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Vadim »

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

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

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

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

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

Сообщение скалогрыз »

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
а правило всегда одно: проще - лучше!
Putnick
новенький
Сообщения: 62
Зарегистрирован: 18.03.2009 12:02:56

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

Сообщение Putnick »

Кстати, по поводу "спасения от циклов":

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

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: Мы спасены!
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

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

Сообщение vada »

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


А теперь вторую задачу без массивов :)
Ответить