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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2010, 16:21   #1
boing
 
Регистрация: 13.04.2010
Сообщений: 7
Сообщение поправте код

Правила выбора вариантов заданий: Пишется Фамилия, имя и отчество одной строкой без пробелов. Фамилия, имя и отчество пишутся с большой буквы («ФамилияИмяОтчество»). Вариант задания 1-го блока выбирается следующим образом: в получившейся строке берется первая и последняя буква, складываются их ASCII-коды и находится остаток получившейся суммы при делении на 4, с прибавлением 1. (Например, пусть коды 143 и 157. 143+157=300. 300 = 75 ∙ 4 + 0. Получившийся номер варианта 0+1=1. ) Для выбора задания из второго блока берется вторая и предпоследняя буквы строки и т.д.
Примечание: если строка получается длиной меньше 12 символов, то использовать строку, трижды содержащую имя и фамилию («ФамилияИмяФамилияИмяФамилияИмя»).

Код:
program qwe;
uses crt;
var s:string;
    i,zad1,zad2,zad3,zad4,zad5,zad6:integer;
begin
clrscr;
writeln('vvedite FIO');
read(s);
for i:=1 to length(s) do
begin
zad1:=(ord(s[i])+(ord(s[length(s)]))) mod 4+1;
end;
for i:=2 to length(s) do
begin
zad2:=(ord(s[i])+(ord(s[length(s)-1]))) mod 4+1;
end;
for i:=3 to length(s) do
begin
zad3:=(ord(s[i])+(ord(s[length(s)-2]))) mod 4+1;
end;
for i:=4 to length(s) do
begin
zad4:=(ord(s[i])+(ord(s[length(s)-3]))) mod 4+1;
end;
for i:=5 to length(s) do
begin
zad5:=(ord(s[i])+(ord(s[length(s)-4]))) mod 4+1;
end;
for i:=6 to length(s) do
begin
zad6:=(ord(s[i])+(ord(s[length(s)-5]))) mod 4+1;
end;
writeln(zad1);
writeln(zad2);
writeln(zad3);
writeln(zad4);
writeln(zad5);
writeln(zad6);
end
.

Последний раз редактировалось Stilet; 13.04.2010 в 16:26.
boing вне форума Ответить с цитированием
Старый 13.04.2010, 19:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) не надо суммировать в цикле!!!! (тем более, что делаете Вы это абсолютно неверно!)
2) проверки на то, что длина получилась меньше 12 - нет.
3) номера заданий либо просто выдавать на экран,
либо (если нужно их сохранить), то сохранять их в массив!

примерно так:
Код:
program qwe;
uses crt;
const
    MaxZadanKolvo = 6;
var s :string;
    i : integer;
    zad : array[1..MaxZadanKolvo] of integer;
begin
  clrscr;
  writeln('vvedite FIO');
  read(s);
  
  {лучше проверять не меньше 12, 
    а так (и не забыть объявить s2):
      s2 := '';
      while length(s2)< (MaxZadanKolvo * 2) do s2 := s2 + s;
      s := s2;
  }
  if length(s)<12 then s := s + s + s;

  if (length(s) div 2) < MaxZadanKolvo then
    WriteLn('Strochka slishkom korotka!')
  else begin

    for i:=1 to MaxZadanKolvo do
       zad[i] := ((ord(s[i]) + ord(s[length(s)-i+1])) mod 4) + 1;


    for i:=1 to MaxZadanKolvo do
      WriteLn('Zadanie v blok ',i:1,' variant ',zad[i]);
  end;
end.

Последний раз редактировалось Serge_Bliznykov; 13.04.2010 в 19:33.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приближенное вычисление опред. интеграла. Поправте код. fos1k Помощь студентам 5 20.12.2009 23:29
Поправте программу.... netcher Паскаль, Turbo Pascal, PascalABC.NET 1 21.04.2009 22:03
поправте програмку astrozombie Паскаль, Turbo Pascal, PascalABC.NET 6 21.04.2009 20:04