Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 12:39   #1
OldOwlOll
Форумчанин
 
Аватар для OldOwlOll
 
Регистрация: 28.11.2014
Сообщений: 172
По умолчанию Вопросы по азам

Есть вопросы, ответы на которые не дает учебник. И в интернете их найти почти невозможно. Ответы на них может дать только тот, кто "в теме". А что делать затерянному в глубинке новичку, решившему освоить Паскаль самостоятельно? Только просить Вашей помощи. Помогите!

Задача: Написать процедуру, меняющую символ "A" на символ "B" в трех строках.

Я использовала в качестве формального параметра глобальную переменную, а в примере из учебника - новая переменная. Оба варианта компилируются и работают корректно.

Вопрос:

Нужно вводить новую переменную, просто я еще слишком мало знаю, чтобы понять почему?
или
Нужно вводить новую переменную, потому что так принято?
или
Можно использовать глобальную переменную, если это не помещает работе других частей программы?
или else?

Моё решение:
Код:
const
  a = 'a';

var
  S: string;
  k: integer;

procedure Scan(S: string);
var
  k: integer;
begin
  for k := 1 to Length(S) do 
    if S[k] = a then S[k] := 'b';
  writeln(S);
  
end;

begin
  repeat
    for k := 1 to 3 do 
    begin
      Writeln('Введите строку '); Readln(S);
      Scan(S);
    end
  until Length(S) = 0;
end.
Решение в учебнике:
Код:
var
  S: string;
  k: integer;

procedure Scan(var arg: string);
var
  k: integer;
begin
  for k := 1 to Length(arg) do 
    if arg[k] = 'a' then arg[k] := 'b';
   
end;

begin
    for k := 1 to 3 do 
    begin
      Writeln('Введите строку '); Readln(S);
      Scan(S);
      writeln(S);
    end;

end.
Делать то, что любишь - это свобода. Любить то, что делаешь - счастье. (с)
Свободу киндерам!
Счастья всем. Бесплатно. И пусть никто не уйдет обиженным. (с)
OldOwlOll вне форума Ответить с цитированием
Старый 30.11.2014, 12:47   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Нужно вводить новую переменную, потому что так принято?
Так можно избежать многих ошибок когда программа более сложной будет. Использование глобальных очень желательно минимизировать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.11.2014, 13:06   #3
OldOwlOll
Форумчанин
 
Аватар для OldOwlOll
 
Регистрация: 28.11.2014
Сообщений: 172
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Так можно избежать многих ошибок когда программа более сложной будет. Использование глобальных очень желательно минимизировать
Спасибо!
Запомню

Попыталась решить задачку с форума
(найти максимум и минимум в трех тройках чисел)
Программа компилируется, работает корректно.

Что плохо в моем варианте решения? (разумеется, кроме громоздкости ввода и вывода - тут пока моих знаний не хватает, но я учусь )
Может, есть хорошее?



Код:
program MaxAndMin;

var
  a1, b1, c1, a2, b2, c2, a3, b3, c3: integer;

function Swap2(var x, y: integer): boolean;//выстраиваю два числа в порядке возрастания
var
  t: integer;
begin
  if x > y 
  then begin
    t := x; x := y; y := t;
    Swap2 := true
  end
  else Swap2 := false
end;

procedure Swap3(var a, b, c: integer);//выстраиваю три числа в порядке возрастания
begin
  Swap2(a, b);
  if Swap2(b, c)
    then Swap2(a, b)
end;

begin
  Writeln('введите число'); Readln(a1);
  Writeln('введите число'); Readln(b1);
  Writeln('введите число'); Readln(c1);
  Writeln('введите число'); Readln(a2);
  Writeln('введите число'); Readln(b2);
  Writeln('введите число'); Readln(c2);
  Writeln('введите число'); Readln(a3);
  Writeln('введите число'); Readln(b3);
  Writeln('введите число'); Readln(c3);
  
  Swap3(a1, b1, c1);
  Writeln(a1, c1);//вывожу минимум и максимум первой тройки
  Swap3(a2, b2, c2);
  Writeln(a2, c2);//минимум и максимум второй тройки
  Swap3(a3, b3, c3);
  Writeln(a3, c3);//минимум и максимум третей тройки
  Swap3(a1, a2, a3);
  Writeln('Min: ', a1);
  Swap3(c1, c2, c3);
  Writeln('Max: ', c3)
end.
Делать то, что любишь - это свобода. Любить то, что делаешь - счастье. (с)
Свободу киндерам!
Счастья всем. Бесплатно. И пусть никто не уйдет обиженным. (с)

Последний раз редактировалось Stilet; 30.11.2014 в 20:58.
OldOwlOll вне форума Ответить с цитированием
Старый 30.11.2014, 13:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что плохо в моем варианте решения?
А кто сказал что что-то плохо?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 14:00   #5
OldOwlOll
Форумчанин
 
Аватар для OldOwlOll
 
Регистрация: 28.11.2014
Сообщений: 172
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А кто сказал что что-то плохо?
пока - никто

Но не могла же я написать идеальную программу на третий день знакомства с программированием

В ветке задачи другое решение. Раз есть два решения, значит хотя бы одно из них (моё, разумеется) имеет недостатки. Помогите мне их увидеть и стать лучше, пожалуйста!

Может быть мой вариант выполняется дольше?... я еще не знаю, как это проверить и какие операторы быстрее
Мне кажется, мой вариант берет меньше памяти за счет меньшего количества переменных, но я могу ошибаться....
Может, такое вариант хуже читается человеком?...
Это только то, что я могу предположить, а сколько я даже предполагать не могу ввиду недостатка компетенций... ойой :P
Делать то, что любишь - это свобода. Любить то, что делаешь - счастье. (с)
Свободу киндерам!
Счастья всем. Бесплатно. И пусть никто не уйдет обиженным. (с)

Последний раз редактировалось OldOwlOll; 30.11.2014 в 14:10.
OldOwlOll вне форума Ответить с цитированием
Старый 30.11.2014, 14:23   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А если 100 чисел ввести - 100 Writeln?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.11.2014, 14:34   #7
OldOwlOll
Форумчанин
 
Аватар для OldOwlOll
 
Регистрация: 28.11.2014
Сообщений: 172
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А если 100 чисел ввести - 100 Writeln?
И найти там максимальное и минимальное?

Тогда "методом пузырька"

Или Вы хотели спросить что-то другое?
Что вводить так 100 чисел невозможно? Понимаю. Работаю над этим вопросом - учусь До массивов и ввода из файла еще не дошла, разбираюсь со строковыми данными.

Разбить их на тройки? Или другой вопрос?... Я не поняла
Делать то, что любишь - это свобода. Любить то, что делаешь - счастье. (с)
Свободу киндерам!
Счастья всем. Бесплатно. И пусть никто не уйдет обиженным. (с)
OldOwlOll вне форума Ответить с цитированием
Старый 30.11.2014, 18:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я не поняла
А ты попробуй создай в редакторе код с подобным почисленным вводом. Но не сто чисел а 8 миллионов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 19:23   #9
OldOwlOll
Форумчанин
 
Аватар для OldOwlOll
 
Регистрация: 28.11.2014
Сообщений: 172
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты попробуй создай в редакторе код с подобным почисленным вводом. Но не сто чисел а 8 миллионов.
Зачем?

На данном этапе моей компетенции для меня эта задача - пустая потеря времени. Если пытаться через цикл, то я не умею автоматически создавать имена переменных.
Через пару-тройку дней я смогу ввести эти числа через массив, зачем впустую тратить время сейчас?

Но если Вы обоснуете задание, я постараюсь его выполнить.
Делать то, что любишь - это свобода. Любить то, что делаешь - счастье. (с)
Свободу киндерам!
Счастья всем. Бесплатно. И пусть никто не уйдет обиженным. (с)
OldOwlOll вне форума Ответить с цитированием
Старый 30.11.2014, 19:54   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Зачем?
Затем, чтобы осознать, что писать
Код:
WriteLn(' Введите число')
перед
Код:
 ReadLn(а)
вовсе необязательно..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД вопросы spqr82 Microsoft Office Access 3 04.07.2013 11:30
Вопросы по C++ ITTI Помощь студентам 7 20.12.2011 19:14
Вопросы по БД Rost93 PHP 9 28.06.2011 22:18
Вопросы по С++ Fantazerishka Общие вопросы C/C++ 2 19.05.2010 06:52
Вопросы по if, else? molodoyy Общие вопросы C/C++ 1 25.10.2008 18:55