Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

lamed
Статус: Практикант
Рейтинг: 2108
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1751
∙ повысить рейтинг »
_Ayl_
Статус: Студент
Рейтинг: 1578
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Pascal (Паскаль)

Номер выпуска:1023
Дата выхода:06.02.2010, 08:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:331 / 198
Вопросов / ответов:7 / 12

Вопрос № 176398: Добрый вечер!Помогите пожалуйста с одной задачкой: По массиву А получить b,присвоив его-к-му элементу значение истина,если выполнено ниже условие,и значение false иначе: а)если все элементы к-го столбца масива А-нулевые б)элементы к-й строки...


Вопрос № 176402: Здравствуйте. Нужно написать программку, с помощью программы паскаль, которая должна анализировать содержание текстового файла с описанием переменных и определять, есть ли ошибка в этом описании. Задание. Анализ описания переменных Соз...
Вопрос № 176406: Здравствуйте, прошу помочь в решении моей задачи. Писал в "Задачник" но что то не кто не ответил. Теперь попробую написать всем остальным(если я тут не чего не напутал) может хоть кто-то поможет. Есть код программы на нахождение минимуму фу...
Вопрос № 176420: Добрый вечер!Уважаемые эксперты!Помогите решить пожалуйста вот такую задачу: Дана вещественная матрица размером 7*7,все элементы которой различны.Найти скалярное произведение строки,в которой находится наибольший элемент матрицы,на столбец с наиме...
Вопрос № 176421: Добрый вечер,пожалуйста помогите решить одну вот такую задачу: Получить массива В из массива А,удалением n-й строки и к-го столбца ...
Вопрос № 176422: Добрый день,уважаемые эксперты!!!!Помогите пожалуйста решить задачи на двумерные массивы вот ссылка на задачу http://depositfiles.com/files/pe4ednfwl , номер задачи которую надо решить № 9.14 рис.3 (все случаи)
Вопрос № 176426: Добрый вечер!Помогите пожалуйста вот с такой задачей: дан двумерный массив,определить к-количество различных элементов массива (повторяющиеся элементы считать один раз)...

Вопрос № 176398:

Добрый вечер!Помогите пожалуйста с одной задачкой:
По массиву А получить b,присвоив его-к-му элементу значение истина,если выполнено ниже условие,и значение false иначе:
а)если все элементы к-го столбца масива А-нулевые
б)элементы к-й строки массива А упорядочены по убыванию
в)к-я строка массива А симметрична

Отправлен: 31.01.2010, 08:46
Вопрос задал: angel.nero, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Пупорев Юрий Борисович, Специалист :
Здравствуйте, angel.nero!
Поскольку задачи близнецы, подробно комментировал только первую.
Решение в приложении.

Приложение:

Ответ отправил: Пупорев Юрий Борисович, Специалист
Ответ отправлен: 31.01.2010, 15:11
Номер ответа: 259094

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259094 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176402:

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

    Задание.
    Анализ описания переменных
    Создание программы для анализа описания переменных.

    ВХОДНЫЕ ДАННЫЕ
    На вход программы подается текстовый файл (с именем INPUT.TXT), содержащий только описания переменных на выбранном языке (Pascal или C).
    Например, для языка Pascal содержание текстового файла может быть следующим:

    var a, b, c: real;
    d: array [1..6, 6..9] of integer;
    s1: string;
    s2: string[10];

    То есть описание переменных начинается с ключевого слова «var», далее следуют списки имен переменных с указанием типа. В список типов необходимо включить наиболее часто используемые базовые типы. Тип может быть также массивом (в т.ч. многомерным) или строкой. У массива нижняя граница индекса не должна быть меньше верхней. Строка не может быть длиннее 255 символов.

    Имя переменной — это последовательность букв и цифр, начинающаяся с буквы. Под буквами понимаются большие и малые буквы латинского алфавита (a…z, A…Z) и подчеркивание (_). Большинство современных компиляторов не имеют ограничений по длине имен переменных, однако значащими считаются только первые N символов (число N зависит от конкретного компилятора).

    Например, если N = 8, то переменные a1234567 и a12345678 рассматриваются компиляторами как идентичные, хотя обе записи являются синтаксически верными. Значение числа N можно выбрать любое (N ≥ 1), но обычно это 8, 16, 32 и т.д.
    В качестве разделителей, отделяющих друг от друга ключевые слова, имена переменных, знаки пунктуации и т.п., могут выступать:

    пробелы (код ASCII — 32 или $20 в шестнадцатеричном виде);
    переводы строк и возвраты кареток (коды ASCII — 10 ($0A) и 13 ($0D) соответственно);
    табуляции (код ASCII — 9 или $09).
    Для указания символа по его коду в языке Pascal используется знак «#». Либо для этих целей можно использовать функцию CHR (см. ее описание в файле справки компилятора языка Pascal). При указании букв A…F в шестнадцатеричных числах можно использовать как большие, так и малые буквы. Так, для проверки символа ch на возврат каретки можно написать
    if ch = #13 …
    или
    if ch = #$0D …
    или же
    if ch = chr(13) …

    Для языка C файл может быть таким:
    double a[10], b, c;
    int x_q[5][5];
    То есть описание состоит из указаний типов данных со следующими за ними списками имен переменных. Язык C поддерживает различные модификаторы типов — модификаторы размера (long/short), знака (signed/unsigned) и прочие (auto, register, volatile, const, static). Для упрощения задачи будем рассматривать только модификаторы размера. Обратите внимание, что модификатор может использоваться без указания базового типа, в этом случае в качестве базового типа подразумевается тип int. Например, запись
    long
    эквивалентна з аписи
    long int
    Модификатор long может использоваться с типами int и double, модификатор short — только с типом int.
    Т.к. язык C не делает различий между символом и целым числом (байтом), то для проверки кода числа можно просто сравнить символ с кодом:
    if(ch == 13) …
    Если компилятор выдает в этом случае предупреждение о возможном несоответствии данных, можно использовать явное преобразование типа:
    if(ch == char(13)) …
    Либо можно использовать запись ‘\OOO’ или ‘\xHH’, где OOO — восьмеричная запись кода символа (максимальный код — 3778), HH — шестнадцатеричная (максимальный код — FF16). Так, проверку на символ перевода строки можно также записать в таком виде:
    if(ch == ‘\x0d’) …
    или
    if(ch == ‘\15’) …
    В языке C существуют также специальные символы для обозначения некоторых непечатных элементов таблицы ASCII:
    ‘\n’ — перевод строки (next line);
    ‘\r’ — возврат каретки (carriage return);
    ‘\t’ — табуляция (tabulate);
    Пробелы (как в Pascal, так и в C) можно обозначать просто в виде пробела, заключенного в кавычки (‘ ’).
    В отличие от языка Pascal в языке C размерность масси ва указывается в виде одной цифры (обязательно положительной), и каждая размерность заключается в квадратные скобки.


    ВЫХОДНЫЕ ДАННЫЕ
    Ваша программа должна проанализировать имеющиеся в текстовом файле описания переменных и выдать (в текстовый файл OUTPUT.TXT или на экран) результат проверки. Это может быть:
    1. Сообщение о том, что описание корректное.
    2. Сообщение о синтаксической ошибке (неправильные имена переменных, ошибки при использовании ключевых слов, неверные индексы массивов, отсутствие знаков пунктуации и т.д.). Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.
    3. Сообщение о дублировании имен переменных. В этом случае на выходе программы необходимо указать имя дублируемой переменной, а также строку и позицию в строке, где встретился дубликат.

    Отправлен: 31.01.2010, 09:40
    Вопрос задал: allxmiss, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Patriotix-N, 5-й класс :
    Здравствуйте, allxmiss.
    Есть множество способов решения данной задачи, я выбрал этот, т.к. мне он показался более простым. Все можно было свернуть и в простой "while" цикл и вести обработку через "if then". Я же выбрал структурированный вариант - "case", мне кажется, он не из лучших, но большую роль здесь сыграла и проблема с поиском начала объявления - ключевого слова "var" и последующим переходом к описанию переменных.
    Также можно было обрабатывать файл, получая по одному символу, а не по строке. По ряду причин, я выбрал вариант с построчной обработкой файла.
    И последнее - фактически массив строк "lines[][]" нигде не используется. Поэтому если есть ограничения на занимаемую память, то можно пользоватся всего одной строкой.
    Ну и, конечно, можно провести оптимизацию кода.
    Конечная доводка велась путем классического "шаманства", так что, кое-где просто вставлены нужные строчки. На первый взгляд, вс е работает, но попробуйте погонять программу в разных ситуациях - я на это уже не способен
    Еще одна проблема, на мой взгляд, так и осталась нерешенной - проблема "табуляции". Правил табуляции я не нашел и принял за единицу табуляции 4 символа.
    Для понятности кода, я использовал интуитивно-понятные имена переменных и комментарии, но если возникнут вопросы(по коду или если найдете ошибки) обращяйтесь(думаю, уже в личку, т.к. срок закрытия вопроса уже истекает).
    Код:

    program varible_3;

    var input:text;
    line,position,err_line,err_pos:integer; //строка и позиция
    err_name:string;
    is_error:boolean=false;
    lines:array of string; //обрабатываемая стро ка

    startP,endP:string; //Начало и конец массива
    Prev_Pos:byte;

    name:array of string;
    name_nmb:integer;

    unexp_end:boolean=false;
    is_array:boolean=false;
    aft_str:boolean=false;
    aft_dots:boolean=false;

    temp_str:string;

    j:integer;
    var_str:string;
    const
    //Предыдущий символ
    SEMICOLON = 1; //разделитель - ";" или ",". Т.е. кончилось объявление предыдущей переменной.
    STR = 2; //переменная
    COLON = 3; // ":" или "OF"
    ARRAY_P = 4;
    BRECKET_1 = 5; // "[" или ".." или ","
    BRECKET_2 = 6;
    VAR_TYPE = 8;
    NUMERIC = 9;

    N = 8;
    function separator(sep:char):boolean;
    begin
    separator:=(sep = #32) or (sep=#9);
    end;

    function symb(smb:char):boolean;
    begin
    symb := ((smb >='A') and (smb<='Z')) or
    ((smb>='a') and (smb<='z'));
    end;

    function get_str:string;
    begin
    temp_str:='';
    while symb(lines[line][position]) do
    begin
    temp_str:=temp_str+lines[line][position];
    position:=position+1;
    end;
    get_str:=temp_str;
    end;

    function check(chkstr:string):boolean;
    var i:integer;
    dots_str:string;
    keyword:array [1..6] of string;
    label else_p_colon,
    else_p_num,
    else_p_brecket_1,
    else_p_brecket_2;

    begin

    while separator(lines[line][position]) do
    begin
    position:=position+1; //Вычитается ниже
    if lines[line][position]=#9 then err_pos:=err_pos+4-1; //плюс количество смволов в табуляции(обычно 4 или 8) и минус уже прибавленную до этого позицию
    end;

    if (lines[line][position]=#13) or
    (lines[line][positio n]=#10) or
    (lines[line][position]=#0)then
    begin
    check:=true;
    exit;
    end;

    case prev_pos of
    SEMICOLON:
    begin
    unexp_end:=false;
    keyword[1]:='STRING';
    keyword[2]:='INTEGER';
    keyword[3]:='REAL';
    keyword[4]:='ARRAY';
    keyword[5]:='OF';
    keyword[6]:='VAR';
    if (symb(lines[line][position])) or (lines[line][position]='_') then //Если в теущий знак может быть началом перменной
    begin
    name_nmb:=name_nmb+1; //Увеличиваем счетчик имен пермеменных
    setlength(name,name_nmb+1); //расширяем массив имен
    while (symb(lines[line][position])) or
    (lines[line][position]='_') or
    ((lines[line][position]>='0') and (lines[line][position]<='9')) do
    begin
    name[name_nmb]:=name[name_nmb]+lines[line][position];
    position:=position+1;
    end;
    for i:=1 to 6 do
    if UpperCase(name[name_nmb])=keyword[i] then
    begin
    err_name:='Переменная не может быть ключевым словом - '+'"'+name[name_nmb]+'"';
    err_line:=line;
    err_pos:=err_pos+position -(length(name[name_nmb]));//Вроде так...
    check:=false;
    exit;
    end;
    delete(name[name_nmb],N+1,length(name[name_nmb])); //Значимыми являются только первые N символов - удаляем все, лишнее

    for i:=1 to name_nmb-1 do //Проверя ем нет объявлена ли переменная ранее. Можно обойтись и без вспомогательного массива. Но в этом случае алгоритм будет сложнее, а одна переменная типа string все равно понадобится. for i:=1 to line do if (pos(name,lines[i])<>0) and (pos(name,lines[i])<>(position-(name_pos-1))) then выводим ошибку;
    if UpperCase(name[name_nmb]) = UpperCase(name[i]) then //Имена перменных не чувствительны к регистру
    begin //Выводим ошибку
    err_name:='Переменная с таким именем уже определена - '+'"'+name[name_nmb]+'"';
    err_line:=line;
    err_pos:=err_pos+position -(length(name[name_nmb]));//Вроде так...
    check:=false;
    exit;
    end;
    prev_pos:=STR;
    check(li nes[line]);
    exit;
    end
    else
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    err_name:='Переменная не может начинаться с символа: '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    STR :
    begin
    if lines[line][position] = ',' then
    begin
    unexp_end:=true;
    prev_pos:=SEMICOLON;
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    if lines[line][position] = ':' then
    begi n
    prev_pos:=COLON;
    position:=position+1;
    check(lines[line ]);
    exit;
    end
    else //ошибка
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    err_name:='Ожидается "," или ":", а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    COLON :
    begin
    case UpCase(lines[line][position]) of
    'A':
    begin
    if UpperCase(get_str) = 'ARRAY' then
    begin
    prev_pos:= ARRAY_P;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_colon;
    end;
    'S':
    begin
    if UpperCase(get_str) = 'STRING' then
    begin
    prev_pos:=VAR_TYPE;
    aft_str:=true;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_colon;
    end;
    'I':
    begin
    if UpperCase(get_str) = 'INTEGER' then
    begin
    prev_pos:=VAR_TYPE;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_colon;
    end;
    'R':
    begin
    if UpperCase(get_str) = 'REAL' then
    begin
    prev_pos:=VAR_TYPE;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_colon;
    end;
    else
    begin
    else_p_colon: err_name:='Ожидается "array" или тип переменной'; //Можно добавить вывод имени, встретившегося вместо переменной
    err_line:=line;
    err_pos:=err_pos+position-(length(temp_str));
    check:=false;
    exit;
    end;
    end;
    end;
    ARRAY_P :
    begin
    is_array:=true;
    if lines[line][position] = '[' then
    begin
    prev_pos:=BRECKET_1;
    startP:='';
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    if (UpCase(lines[line][position])='O') then
    begin
    if UpperCase(get_str) = 'OF' then
    begin
    prev_pos:=COLON;
    is_array:=false;
    check(lines[line]);
    exit;
    end
    end
    else
    begin
    err_line:=line;
    err_pos:= err_pos+position;
    err_name:='Ожидается "[", а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    BRECKET_1: // "[" , ".." , ","
    begin
    if (lines[line][position]>='0') and (lines[line][position]<='9') then
    begin
    if (not aft_dots) or (aft_str) then //если двух точек не было ИЛИ это не строка
    begin
    while (lines[line][position]>='0') and (lines[line][position]<='9') do
    begin
    startP:=startP+lines[line][position];
    position:=position+1;
    end;< br> if aft_str then //Проверка длинны строки не может быть длиннее 255 сиволов
    if StrToInt(startP) > 255 then
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    err_name:='Длинна строки не может быть больше 255';
    check:=false;
    exit;
    end;
    end
    else //если 2 точки были
    begin
    while (lines[line][position]>='0') and (lines[line][position]<='9') do
    begin
    endP:=endP+lines[line][position];
    position:=position+1;
    end ;
    if StrToInt(endP) < StrToInt(startP) then //Проверяем границы массива
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    err_name:='Верхняя граница массива не может быть меньше нижней';
    check:=false;
    exit;
    end
    end;
    prev_pos:=NUMERIC;
    check(lines[line]);
    exit;
    end
    else //Если не цифра
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    err_name:='Ожидается цифра, а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    NUMERIC :
    begin
    case lines[line][position] of
    '.' :
    begin
    if (not aft_str) and (not aft_dots) then
    begin
    while lines[line][position]='.' do //Впринципе, можно совместить с процедурой get_str
    begin
    dots_str:=dots_str+lines[line][position];
    position:=position+1;
    end;
    if dots_str = '..' then
    begin
    prev_pos:=BRECKET_1;
    endP:='';
    aft_dots:=true;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_num;
    end
    else
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    if aft_str then
    err_name:='Ожидается "]", а найдено '+'"'+lines[err_line][err_pos]+'"'
    else
    err_name:='Не ожидается "."';
    check:=false;
    exit;
    end;
    end;

    ',' :
    begin
    if (not aft_str) and (aft_dots) then //Уже было ".."
    begin
    prev_pos:=BRECKET_1;
    startP:='';
    position:=position+1;
    aft_dots:=false;
    check(lines[line]);
    exit;
    end
    else
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    if aft_str then
    err_name:='Ожидается "]", а найдено '+'"'+lines[err_line][ err_pos]+'"'
    else
    err_name:='Не ожидается ","';
    check:=false;
    exit;
    end;
    end;
    ']' :
    begin
    if ((is_array) and (aft_dots)) or (aft_str) then
    begin
    prev_pos:=BRECKET_2;
    aft_str:=false;
    aft_dots:=false;//************
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_num;
    end;
    else
    else_p_num: begin
    err_line:=line;
    err_pos:=err_pos+position;
    if (not aft_dots) and (not aft_str) then
    err_name:='Ожидается ".."'
    else
    if aft_str then
    err_name:='Ожидается "]", а найдено '+'"'+lines[err_line][err_pos]+'"'
    else
    err_name:='Ожидается "," или "]", а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    end;
    BRECKET_2:
    begin
    i f (lines[line][position]=';') and (not is_array) then //Если не идет объявления массива
    begin
    prev_pos:=SEMICOLON;
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    if (UpCase(lines[line][position])='O') and (is_array) then //Если идет объявление массива
    begin
    if UpperCase(get_str) = 'OF' then
    begin
    prev_pos:=COLON;
    is_array:=false;
    check(lines[line]);
    exit;
    end
    else
    goto else_p_brecket_2;
    end
    else
    else_p_brecket_2: begin
    err_line:=line;
    err_pos:=err_pos+position;
    if not is_array then
    err_name:='Ожидается ";", а найдено '+'"'+lines[err_line][err_pos]+'"'
    else
    err_name:='Ожидается "of", а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end
    end;
    VAR_TYPE :
    begin
    if (lines[line][position] = '[') and (aft_str) then
    begin
    prev_pos:=BRECKET_1;
    startP:='';
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    if lines[line][position] = ';' then
    begin
    prev_pos:=SEMICOLON; //unexp_end:=false;
    position:=position+1;
    check(lines[line]);
    exit;
    end
    else
    begin
    err_line:=line;
    err_pos:=err_pos+position;
    if aft_str then
    err_name:='Ожидается "[" или ";", а найдено '+'"'+lines[err_line][err_pos]+'"'
    else
    err_name:='Ожидается ";", а найдено '+'"'+lines[err_line][err_pos]+'"';
    check:=false;
    exit;
    end;
    end;
    end;
    end;
    //----------Начало программы----------//
    begin
    err_name:='Ошибок не обнаружено';< br> assignfile(input,'input.txt');
    reset(input);
    line:=0;

    while not EOF(input) do //Ищем начало объявлений
    begin
    line:=line+1; //увеличиваем счетчик строк на 1
    setlength(lines,line+1); //Устанавливаем размер массива
    readln(input,lines[line]); //считываем строку
    j:=1;
    while (not symb(lines[line][j])) and
    (lines[line][j]<>#13) and
    (lines[line][j]<>#10) do j:=j+1;
    if (lines[line][j]=#13) or
    (lines[line][j]=#10) then
    continue;
    while symb(lines[line][j]) do
    begin
    var_str:=var_str+lines[line][j];
    j:=j+1;
    end;
    if (UpperCase(var_str)='VAR') and (( separator(lines[line][j]) or
    (lines[line][j]=#10) or
    (lines[line][j]=#13) ) and //следующий за ним символ - разделитель
    ( (separato r(lines[line][j-length(var_str)-1])or // предыдущий - разделитель
    (lines[line][j-length(var_str)-1]=#10) or
    (lines[line][j-length(var_str)-1]=#13) or
    (lines[line][j-length(var_str)-1]=#0)) )) then //предыдущий - начало файла
    begin
    position:=j;
    break; //выходим из цикла - while
    end;
    end;

    prev_pos:=SEMICOLON;

    if check(lines[line]) then //Можно попробовать убрать фроверку отсюда и просто начинать следующий цикл с этого кода
    is_error:=false //Но возникает проблема.
    else
    is_error:=true;
    if err_name='Ошибок не обнаружено' then //Почему нужна эта проверка не знаю, но без нее не работало :-)
    is_error:=false;

    while (not eof(input)) and (not is_error) do //Если не конец файла и не ошибка
    begin
    line:=line+1; //увеличиваем счетчик строк на 1
    setlength(lines,line+1);
    readln(input,lines[line]); //считываем строку
    position:=1;
    err_pos:=0;
    if check(lines[line]) then //Проверка должна быть именно здесь, если ее поместить в начале цикла, то последняя строка небудет проверятся, т.к. обнаружится "OEF" - конец файла
    is_error:=false
    else
    if err_name<>'Ошибок не обнаружено' then //Почему нужна эта проверка не знаю, но без нее не работало :-)
    begin
    is_error:=true;
    break;
    end
    else is_error:=false;
    end;

    if ((prev_pos <> SEMICOLON) or (unexp_end)) and (not is_error) then
    begin
    err_line:=line;
    err_pos:=position;
    err_name:='Неожиданный конец файла';
    end;



    close(input);


    assignfile(output,'output.txt');
    Rewrite(output);

    writeln(output,err_name);
    if err_name<>'Ошибок не обнаружено' then
    writeln(output,'В позиции: '+IntToStr(err_line )+':'+IntToStr(err_pos));

    close(output);

    end.

    input.txt:
    Код:

    vAr a, b, c: real; d: array [1..6, 6..9] of integer;
    s1: string;
    s2: string[10];
    f: array of real;
    f4:array [1..1] of real
    ;
    F4:string[255];

    output.txt
    Код:

    Переменная с таким именем уже определена - "F4"
    В позиции: 7:1

    -----
    Лучше знать ничего обо всем, чем все ни о чем.

    Ответ отправил: Patriotix-N, 5-й класс
    Ответ отправлен: 05.02.2010, 06:06
    Номер ответа: 259226

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо Вам, за знакомство,
    Спасибо Вам за внимание,
    Спасибо за работу.
    Спасибо ещё раз за всё!!!

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259226 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176406:

    Здравствуйте, прошу помочь в решении моей задачи. Писал в "Задачник" но что то не кто не ответил. Теперь попробую написать всем остальным(если я тут не чего не напутал) может хоть кто-то поможет. Есть код программы на нахождение минимуму функции(сам код прилагается). Так вот программа выводит на экран значение "min", надо дописать программу что бы среди этих "min" находилось самое наименьшее среди них. В приложении программа реализуюшая простой генетический алгоритм (селекция, скркшивание, мутация) для нахождения минимума функции Z(x,y)=x^2+y^2, -5.12<=x<=5.12, -5.12<=y<=5.12.

    Отправлен: 31.01.2010, 10:52
    Вопрос задал: Hivrenko, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Лейла, 5-й класс :
    Здравствуйте, Hivrenko.
    Это делается просто:
    1) заводим переменную min_of_min типа real.
    2) в цикле repeat-until в главной процедуре добавляем условие if min_of_min>min then min_of_min:=min;

    Приложение:

    Ответ отправил: Лейла, 5-й класс
    Ответ отправлен: 31.01.2010, 16:02
    Номер ответа: 259096

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259096 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176420:

    Добрый вечер!Уважаемые эксперты!Помогите решить пожалуйста вот такую задачу:
    Дана вещественная матрица размером 7*7,все элементы которой различны.Найти скалярное произведение строки,в которой находится наибольший элемент матрицы,на столбец с наименьшим элементом.

    Отправлен: 31.01.2010, 21:31
    Вопрос задал: angel.nero, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает riaman, 2-й класс :
    Здравствуйте, angel.nero.
    Скалярное произведение это сумма произведений соответствующих координат, то есть элементов массива. Ну и вот сразу решение:
    max:=M[1,1];
    max_i:=1;
    min:=M[1,1];
    min_j:=1;
    //поиск наименьшего и наибольшего эл-ов
    for i:=1 to 7 do
    for j:=1 to 7 do begin
    if M[i,j]>max then begin
    max:=M[i,j];
    max_i:=i;
    end;
    if M[i,j]<min then begin
    min:=M[i,j];
    min_j:=j;
    end
    end;
    //сколярное произведение строки на столбец
    sp:=0;
    for i:=1 to 7 do sp:=sp+M[max_i,i]*M[i,min_j];
    //конец

    Ответ отправил: riaman, 2-й класс
    Ответ отправлен: 31.01.2010, 23:11
    Номер ответа: 259105

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259105 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176421:

    Добрый вечер,пожалуйста помогите решить одну вот такую задачу:
    Получить массива В из массива А,удалением n-й строки и к-го столбца

    Отправлен: 31.01.2010, 21:31
    Вопрос задал: angel.nero, Посетитель
    Всего ответов: 3
    Страница вопроса »


    Отвечает riaman, 2-й класс :
    Здравствуйте, angel.nero.
    Я так понял, вам надо из двумерного массива удалить n столбец и k стлобец, а правельнее будет сказать, удалить их из матрицы. Для этого надо удалить из массива все элементы с индексами: [n,i], где i изменяется от 1 до N_str (N_str - кол-во строк) и элементы с индексами [j,k], где j изменяется от 1 до K_st (K_st - кол-во столбцов). Следует учесь, что при удалении размерность массива (матрицы) уменьшится и станет равной (N_str-1)*(K_st-1). Поэтому предлагаетю следующий алгоритм:
    1) Удаляем строку n. Для этого сдвигаем все строки массива M с индексом строки i>=n на еденицу влево.
    2) Удаляем столбец. Для этого сдвигаем все стролбцы массива M с индексом стлбца j>=k на еденицу влево.
    3) По желанию обнуляем последюю строку и столбец массива с индексами строки и столбца равными соответственно N_str и K_st
    Всё это на языке паскаль будет выглядеть так:
    //удаление строки--------------------
    for i:=n to N_str do
    for j:=1 to K _st do M[i,j]:=M[i+1,j]; //сдвиг в лево строк
    //удаление столбца-----------------
    for i:=1 to N_str-1 do //так как из матрицы уже удалена одна строка, то их число можно взять равны N_str-1
    for j:=k to K_st-1 do M[i,j]:=M[i,j+1]; //сдвиг в лево столбцов
    //Обнуление последних строк и столбца:
    for j:=1 to K_st do M[N_str,j]:=0; //обнуление строки
    for i:=1 to N_str do M[i,K_st]:=0; //обнуление столбца
    //конец
    При выводе следует учесть что размерность массива (матрицы) уменьшилась и стала равной (N_str-1)*(K_st-1). Соответственно обнуление последних элементов строки и столбца можно

    Ответ отправил: riaman, 2-й класс
    Ответ отправлен: 31.01.2010, 22:35
    Номер ответа: 259104

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259104 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает star9491, 5-й класс :
    Здравствуйте, angel.nero.

    Как мне показалось, что по смылу задачи в ней должнв фигурировать два массива A и B. Поэтому я решил написать второй вариант.
    Пусть массив A имеет размер m на s и, соответственно массв B - размер m-1 на s-1. Тогда массив B можно получить следующим образом:

    for i:=1 to m-1 do
    for j:=1 to s-1 do
    if (i<n)and(j<k) then b[i,j]:=a[i,j]
    else if j<k then b[i,j]:=a[i+1,j]
    else b[i,j]:=a[i+1,j+1];

    Ответ отправил: star9491, 5-й класс
    Ответ отправлен: 01.02.2010, 17:30
    Номер ответа: 259131

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259131 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Лейла, 5-й класс :
    Можно так:
    Смотрите приложение.
    Исправлено по просьбе автора ответа.
    -----
    ∙ Отредактировал: Зенченко Константин Николаевич, Модератор
    ∙ Дата редактирования: 03.02.2010, 19:15 (время московское)

    Приложение:

    Ответ отправил: Лейла, 5-й класс
    Ответ отправлен: 01.02.2010, 18:19
    Номер ответа: 259133

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259133 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176422:

    Добрый день,уважаемые эксперты!!!!Помогите пожалуйста решить задачи на двумерные массивы
    вот ссылка на задачу http://depositfiles.com/files/pe4ednfwl , номер задачи которую надо решить № 9.14 рис.3 (все случаи)

    © Цитата: Текст вопроса
    найти сумму элементов из заштрихованной области:
    1) Сумма элементов расположенных по периметру матрицы
    2)Сумма элементов расположенных на главной и побочной диагонали
    3)сумма элементов расположенных в верхнем треуголнике и в нижнем
    4) сумма элементов расположенных внутри ромба


    очень жду вашего ответа!!!

    Отправлен: 31.01.2010, 22:01
    Вопрос задал: angel.nero, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Пупорев Юрий Борисович, Специалист :
    Здравствуйте, angel.nero!
    Решение задач в приложении.

    Приложение:

    Ответ отправил: Пупорев Юрий Борисович, Специалист
    Ответ отправлен: 01.02.2010, 09:11
    Номер ответа: 259121

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259121 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 176426:

    Добрый вечер!Помогите пожалуйста вот с такой задачей:
    дан двумерный массив,определить к-количество различных элементов массива (повторяющиеся элементы считать один раз)

    Отправлен: 01.02.2010, 00:31
    Вопрос задал: angel.nero, Посетитель
    Всего ответов: 4
    Страница вопроса »


    Отвечает riaman, 2-й класс :
    Здравствуйте, angel.nero.
    Я предлагаю такой вот способ. Хотя может с точки зрения экономии ресурсов памяти и времени он и не очень хорош, но решает поставленную задачу. Метод:
    Создается массив (описываем в разделе переменных или создаем динамически) такой же размерностью, что и заданный (если не знаешь как создать массив динамически, то просто опиши массив заранее достаточного размера). После, организуем два вложенных цикла, которые пробегают по всем элементам исходной матрицы:
    //mas - исходный массив
    //mas_ij - созданный массив для подсчета различных эллементов (массив отметок)
    //N - количество строк в массиве
    //K - количество стлбцов в массиве
    //kol - количество различных элементов
    //--------------------------------------

    //заполнение массива отметок числом отличным от чисел, испоьзуемых для
    //подсчета разных элементов
    for i:=1 to N do
    for j:=1 to K do mas_ij[i,j]:=-1;

    //заполнение массива отметок....< br> //берем очередной элемент исходного массива
    for i:=1 to N do
    for j:=1 to K do begin
    //если данный элемент i,j отличается от предыдуших (в масссиве отметок
    //соответствующий элемент равен -1), то ставим в массив отметок 1, иначе
    //переходим к следующей итерации continue (если не знаешь , то можно
    //убрать его, всё-равно алгоритм будет работать)
    if mas_ij[i,j]=-1 then mas_ij[i,j]:=1;
    else continue;
    m:=j+1;
    //сравниваем элемент i,j с последующими элементами
    for l:=i to N do begin
    while m<=K do begin
    //если они равны, записываем в массив отметок 0;
    if mas[i,j]=mas[l,m] then mas_ij[l,m]:=0;
    inc(m);
    end;
    m:=1;
    end;
    end;

    //подсчет различных элементов. сумма элементов массива отметок и будет
    //количеством различных элементов
    kol:=0;
    for i:=1 to N do
    for j:=1 to K do kol:=kol+mas_ij[i,j];
    //конец

    Ответ отправил: riaman, 2-й класс
    Ответ отправлен: 01.02.2010, 02:03
    Номер ответа: 259114

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259114 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Лейла, 5-й класс :
    Здравствуйте, angel.nero.
    Делается просто. В одномерный массив записываем те элементы заданного двумерного массива, которые еще не встречались. По ходу, смотрим, встречалось ли уже такое значение, если нет, то увеличиваем счетчик. Изначальный массив генерируется случайно.
    Решение с комментариями в приложении.
    Редактирование ответа по просьбе эксперта.
    -----
    ∙ Отредактировал: Федоров Михаил/ Error00, Модератор
    ∙ Дата редактирования: 03.02.2010, 00:39 (время московское)

    Приложение:

    Ответ отправил: Лейла, 5-й класс
    Ответ отправлен: 01.02.2010, 02:47
    Номер ответа: 259115

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259115 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Andrew Kovalchuk, 2-й класс :
    Здравствуйте, angel.nero.
    Для учебных задач вместо вектора (одномерного массива) достаточно использовать строку с разделителями.

    Приложение:

    Ответ отправил: Andrew Kovalchuk, 2-й класс
    Ответ отправлен: 01.02.2010, 14:01
    Номер ответа: 259127

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259127 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает _Ayl_, Студент :
    Здравствуйте, angel.nero.

    Предлагаю свой вариант. Предназначен для целых чисел, имеющих размер 1 или 2 байта (т.е. типы Byte, Word или Integer).
    Т.к. нас интересует только признак "число уже встречалось", то идеальная структура языка Паскаль для этого - множество.
    Множества очень эффективно реализованы (для вставки, удаления и проверки выполняется одна-две машинные команды), но
    у них есть ограничение: они могут быть реализованы только на ограниченных типах с количеством элементов не более 256.
    А мы хотим работать с 65536 числами. Заметим, что 65536 = 256 * 256, т.е. если мы заведем массив из 256 множеств, то мы
    сможем охватить весь диапазон 0..256.
    Индексом для выбора нужного множества будет служить старший байт числа, а элементом множества будет младший байт.
    Получение старшего байта - это арифметический сдвиг вправо на 8 разрядов (целочисленное деление на 256), получение
    младшего байта - логическое И с числом 255.
    Функция notY et проверяет, что указанное число еще не встречалось и устанавливает признак.
    Для установки используется процедура Include, существующая в Borland Pascal 7.0. Если в вашей версии такой процедуры нет,
    используйте вместо нее команду:
    Код:

    flg [b] := flg [b] + [n];

    Приложение:

    Ответ отправил: _Ayl_, Студент
    Ответ отправлен: 01.02.2010, 14:25
    Номер ответа: 259128

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259128 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.02.2010

    В избранное