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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2013, 08:03   #1
GreenDay
Пользователь
 
Аватар для GreenDay
 
Регистрация: 02.11.2010
Сообщений: 21
По умолчанию case

Ох тыж лысый ежик, как давно я тут не был. Здравствуйте.
Ребят, подскажите, как можно переобразовать данный код, так чтобы получилось ветвей в кейсе не больше 7... Я что то упустил этот момент, была идея с помощью цикла накрутить, но нет, сказали не там рою...
Код:
program fjgbn;
uses crt;
var n:integer;
begin
  clrscr;
  write('Vvedite echislo elekronov: ');
  readln(n);
  if n<18 then
    case n of
      1:   write('H 1s^1');
      2:   write('He 1s^2');
      3:   write('Li 1s^2');
      4:   write('Be 1s^2 2s^2');
      5:   write('B 1s^2 2s^2 2p^1');
      6:   write('C 1s^2 2s^2 2p^2');
      7:   write('N 1s^2 2s^2 2p^3');
      8:   write('O 1s^2 2s^2 2p^4');
      9:   write('F 1s^2 2s^2 2p^5');
      10:  write('Ne 1s^2 2s^2 2p^6');
      11:  write('Na 3^1');
      12:  write('Mg 3s^2');
      13:  write('Al 3s^2 3p^1');
      14:  write('Si 3s^2 3p^3');
      15:  write('P 3s^2 3p^4');
      16:  write('S 3s^2 3p^5');
      17:  write('Cl 3s^2 3p^5');
      {18:  write('Ar 3s^2 3p^6');}
    end
  else
 write('Znachenie ne korrektno.');
 readkey;
end.
GreenDay вне форума Ответить с цитированием
Старый 20.09.2013, 08:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не вижу никакой формальной логики в зависимости текста от числа электронов.
зато наглядно видно, что вас интересует число от 1 до 17 (18)
поэтому, я бы весь данный текст заменил на работу со структурой
примерно так:
Код:


program fjgbn;
uses crt;

Const
  CountOfElement = 18;  
  NameOfElement : array[1..CountOfElement] of string =
    ('H 1s^1','He 1s^2','Li 1s^2','Be 1s^2 2s^2','B 1s^2 2s^2 2p^1','C 1s^2 2s^2 2p^2',
     'N 1s^2 2s^2 2p^3','O 1s^2 2s^2 2p^4','F 1s^2 2s^2 2p^5','Ne 1s^2 2s^2 2p^6',
     'Na 3^1','Mg 3s^2','Al 3s^2 3p^1','Si 3s^2 3p^3','P 3s^2 3p^4','S 3s^2 3p^5',
     'Cl 3s^2 3p^5','Ar 3s^2 3p^6');

var n:integer;

begin
  clrscr;
  write('Vvedite echislo elekronov  (ot 1 do ',CountOfElement:1,': ');
  readln(n);
  if (n>0) and (n<CountOfElement) 
    then Write(NameOfElement[n])
    else
      write('Znachenie ne korrektno.');
 readkey;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2013, 13:45   #3
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

если исключить названия элементов, то можно обойтись 5ю ветвями... т.е. 6ю...

Код:
var
  n: integer;

begin
  
  write('Vvedite echislo elekronov: ');
  readln(n);
  
  if n < 18 then
    case n of
      1..3: writeln('1s^', n);
      4: writeln('1s^2 2p^2');
      5..10: writeln('1s^2 2s^2 2p^', n - 4);
      11..12: writeln('3s^', n - 10);
      13..18: writeln('3s^2 3p^', n - 10);
    end
  else
    write('Znachenie ne korrektno.');
end.
по другому кол-во ветвей не уменьшить или придется создавать массив строк с названиями элементов... тогда логичнее сделать как указано выше
unbanned вне форума Ответить с цитированием
Старый 20.09.2013, 13:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
если исключить названия элементов, то можно обойтись 5ю ветвями... т.е. 6ю...
Код:
1..3: writeln('1s^', n);
уже при n=3 будет неверно...
Код:
 3:   write('Li 1s^2');
ДОБАВЛЕНО
Впрочем, если обратить внимание на n=11, то у автора топика явно пропущено s
скорее всего, и в случае n=3 - у автора опечатка!

Последний раз редактировалось Serge_Bliznykov; 20.09.2013 в 13:51.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2013, 14:03   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

сейчас только обратил внимание
действительно при 3х электронах будет 1s^2 2s^1
Код:
var
  n: integer;

begin
  
  write('Vvedite echislo elekronov: ');
  readln(n);
  
  if n < 18 then
    case n of
      1..2: writeln('1s^', n);
      3..4: writeln('1s^2 2s^', n-2);
      5..10: writeln('1s^2 2s^2 2p^', n - 4);
      11..12: writeln('3s^', n - 10);
      13..18: writeln('3s^2 3p^', n - 12);
    end
  else
    write('Znachenie ne korrektno.');
end.
P.S.
у автора при 14-17 электронах тоже непонятно....

Последний раз редактировалось unbanned; 20.09.2013 в 14:16.
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение из case 1 в case 2(switch(), язык Си) Павел_95 Помощь студентам 13 11.01.2013 14:18
case boomeer Общие вопросы C/C++ 1 20.08.2010 12:13
Case Is nes@ Помощь студентам 0 18.11.2009 20:21