Динамические структуры данных, работа с файлами (TurboPascal)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Ответить
Raze
Сообщения: 10
Зарегистрирован: 14 фев 2007, 15:05

15 фев 2007, 16:57

Помогите пожалуйста решить 2 задачи, кто может и у кого есть время. Или выложите похожие задачи, чтобы мне разобраться в алгоритме. Просто я только начал изучать Turbo Pascal и многих вещей ещё не знаю. Помогите, если не сложно. Заранее всем спасибо!

1. Дана квадратная матрица А порядка n. Получить матрицу (A-3*E)^2, где Е – единичная матрица порядка n. (Динамические структуры данных)
2. Дан файл на языке Паскаль. Проверить правильность расстановки операторов begin и end. Если ли есть лишние, вывести в какой строке. (Работа с файлами)
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

15 фев 2007, 17:45

стараемся размещать темы в правильном разделе. ;)
Изображение
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

16 фев 2007, 10:51

A-3E:
for i:=1 to n do A[i,i]:=A[i,i]-3.
А вот как ее в квадрат возводить, писать не буду, ибо перемножение матриц есть мозгоедство :)
По второй - идешь, считываешь файл по строке, разбиваешь каждую строку на слова (см. раздел Алгоритмы), проверяшь, не является ли слово begin или end. Если begin - увеличиваешь счетчик на 1, если end - уменьшаешь. Если счетчик стал меньше 0 - выводишь ошибку (лишний end). Если в конце программы счетчик больше 0 -выводишь ошибку (лишний begin)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Oleg_Rus
Сообщения: 330
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

17 фев 2007, 05:55

в принципе вторая задача решается довольно просто - из файла читаешь по словам, сравниваешь с заданными константами и если совпадает, то увеличивай счетчик

const
RazeBegin='begin';
RazeEnd='end';
begin
assign(f, '*.pas'); Reset(f);
while not eof do
begin
read(s);
if s=RazeBegin then Inc(CountBegin);
if s=RazeEnd then Inc(CountEnd);
end;
if CountBegin<>CountEnd then Writeln('Error!!!') Else Writeln('All Right');
end;

немного доработаешь по теме заглавные буквы и усе - ЧТД(Что и Требовалось Доказать)
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

17 фев 2007, 22:49

Oleg_Rus, а если в программе, например, такой кусок текста:
if i=0
then begin

Тогда же ведь этот бегин окажется пропущенным
Дело в том, что когда Паскаль считывает из файла строку, он читает ее полностью. Это только числа в строке он может читать по очереди.
Кстати, если уходить в усложнение, можно вспомнить, что end завершает не только begin, но и except, record, case, asm, finally.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить