1 Востаннє редагувалося Logans (16.01.2013 00:19:45)

Тема: Створення власної програми

Вирішив створити власну, невеличку, програмку. При написанні наткнувся на помилку, як ви вже зрозуміли - потрібна допомога. (Для деяких сюжет програми може показатись туповатим, прошу не судити)
Суть: потрібно ввести тип персонажа, рівень який бажаєте і т.д. при вводі рівня потрібно, щоб коли вводиш число <>90 вибивало "У нас PvP сервер, введіть рівень заново, або виберіть PvE-сервер", і після цього висвічувалось "Бажаєте змінити сервер на PvE?" при вводі "так (да/tak/da)" щоб програма заново кидала на ввод рівня і вже після вводу числа <90 але >0 вибивало продовження програми з "рівень одягу персонажа".
Є частина коду де я не можу вирішити проблему (код нище)

Прихований текст
for i:=1 to n do
       with a1[i] do
        begin
        write('Введіть тип персонажа: '); readln(perc);
        write('рівень який ви хочете: '); readln(lvl);
        if lvl<>90 then write('У нас PvP сервер, введіть рівень заново, або виберіть PvE-сервер')
        else
        if lvl=
        write('рівень одягу персонажа: '); readln(ilvl);
        write('та нік який ви бажаєте: '); readln(nickname);
        writeln('Бажаєте продовжити?'); readln(s);
        if (s='ні') or (s='ni') or (s='net') or (s='нет') then goto m1
        else writeln('Зачекайте...');
     m1:writeln;
        end;

Приклад всієї програми:

Прихований текст
program zd;
uses crt;
label m1,m2,m3;
const n=2;
type wow=record
     perc:string[15];
     lvl:integer;
     ilvl:integer;
     nickname:string[20];
     end;
var a1:array[1..n] of wow;
    i,a:integer;
    s:string[3];
begin
     clrscr;
     for i:=1 to n do
       with a1[i] do
        begin
        write('Введіть тип персонажа: '); readln(perc);
        write('рівень який ви хочете: '); readln(lvl);
        if lvl<>90 then write('У нас PvP сервер, введіть рівень заново, або виберіть PvE-сервер')
        write('Бажаєте вибрати PvE-сервер?')
        else
        if lvl=
        write('рівень одягу персонажа: '); readln(ilvl);
        write('та нік який ви бажаєте: '); readln(nickname);
        writeln('Бажаєте продовжити?'); readln(s);
        if (s='ні') or (s='ni') or (s='net') or (s='нет') then goto m1
        else writeln('Зачекайте...');
     m1:writeln;
        end;
     writeln;
     writeln('Ваш персонаж створюється, зачекайте...');
     for i:=1 to n do
       with a1[i] do
        begin
        if (lvl>90) or (ilvl>520) or (lvl<90) or (ilvl<0) then
        writeln('Існування такого персонажа не можливе...')
        else
        write(perc:10,lvl:5,ilvl:5,nickname:10);
        writeln;
        end;
     readln;
end.

Приклад не зовсім робочої програми без цієї проблеми (тут інша проблема: при вводі "ні" програма не переходить на мітку, а починає роботу з нуля, призміні положення мітки на 31 рядок - проблема не зникає, я зьявляється "переход goto на метку m1 невозможен"):

Прихований текст
program zd;
uses crt;
label m1,m2,m3;
const n=2;
type wow=record
     perc:string[15];
     lvl:integer;
     ilvl:integer;
     nickname:string[20];
     end;
var a1:array[1..n] of wow;
    i,a:integer;
    s:string[3];
begin
     clrscr;
     for i:=1 to n do
       with a1[i] do
        begin
        write('Введіть тип персонажа: '); readln(perc);
        write('рівень який ви хочете: '); readln(lvl);
        if (lvl>90) or (lvl<90) then
        write('У нас PvP сервер, введіть рівень заново...')
        else
        write('рівень одягу персонажа: '); readln(ilvl);
        write('та нік який ви бажаєте: '); readln(nickname);
        writeln('Бажаєте продовжити?'); readln(s);
        if (s='ні') or (s='ni') or (s='net') or (s='нет') then goto m1
        else writeln('Зачекайте...');
     m1:writeln;
        end;
     writeln;
     writeln('Ваш персонаж створюється, зачекайте...');
     for i:=1 to n do
       with a1[i] do
        begin
        if (lvl>90) or (ilvl>520) or (lvl<90) or (ilvl<0) then
        writeln('Існування такого персонажа не можливе...')
        else
        write(perc:10,lvl:5,ilvl:5,nickname:10);
        writeln;
        end;
     readln;
end.

P.S. Як деякі здогадались сюжет програми полягає в частині гри World of Warcraft (WoW).
P.S.S. Прошу не судити мої мотиви, або просто забити на сюжет і глянути на код!
P.S.S.S. Багато раз редагував повідомленя, задолбався, тому якщо замітите помилку в тексті - перефразуйте її як вам потрібно - виправляти не буду!

2

Re: Створення власної програми

if lvl=

гадаю тут описка

3

Re: Створення власної програми

Там ще begin end потрібно, goto використовувати - поганий стиль

Подякували: Logans, Voron3

4 Востаннє редагувалося Logans (16.01.2013 16:32:44)

Re: Створення власної програми

Voron написав:
if lvl=

гадаю тут описка

Тут я знаю, я ще не дописав. Частично проблему я рішив, дякую.

Replace написав:

Там ще begin end потрібно, goto використовувати - поганий стиль

Порадьте заміну goto, тому що мені потрібно переміщатися по всьому коду програми за певною умовою.
Зробити програму процедурами/функціями я ще толком не можу.

5

Re: Створення власної програми

Зробити програму процедурами/функціями я ще толком не можу.

Тут кілька хвилин вчити...

Порадьте заміну goto

Процедури, функції і розгалужені оператори...

Подякували: Logans1

6

Re: Створення власної програми

У вашому випадку там взагалі без goto буде працювати

7

Re: Створення власної програми

Oleg
Ви в курсі, що існують інші логічні оператори крім "or"? Також мені здається тут варто застосувати "case". Простенький приклад з функцією, "case" та "enumeration":

type
  TServer = (sPvP, sPvE, sInvalid);

function LevelBelongs(lvl: Integer): TServer;
begin
  case lvl of
    1..89: LevelBelongs := sPvE;
    90: LevelBelongs := sPvP;
  else
    LevelBelongs := sInvalid;
  end;
end;
Подякували: Logans1