Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Математика


Ответ
 
Опции темы Опции просмотра
Старый 09.02.2009, 16:16   #51 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
Я бы очень хотела разобраться с типами данных "строка" и "символьный". Во-первых, их не объясняли в школе, во-вторых, данные таких типов есть в ЕГЭ, а в-третьих, я стала решать эти задачи из ЕГЭ, но ничего не получается((( Пробовала набирать программу как в книжке, а Паскаль выдает ошибку.
Ну раз уж набивали - покажите, что за программа. Разберемся. А в самИх типах, в принципе, ничего сложного. Тип Char это литерный тип, переменная этого типа принимает значение буквы, цифры, знака или символа. Строка (тип STRING) это что-то вроде одномерного массива литер. "Что-то вроде" потому что есть некоторые тонкости. Например, присваивать литерной переменной значение элемента строки можно, а вот обратная манипуляция не проходит (впрочем не исключаю, что это свойство моего транслятора). Например, программа

VAR
name:STRING;
letter:Char;
BEGIN
name:='Masha';
letter:=name[3];
Writeln(letter);
Readln;
END.

пройдет абсолютно нормально и выдаст как результат литеру "s". А вот такая:

VAR
name:STRING;
BEGIN
name[1]:='M';
name[2]:='a';
name[3]:='s';
name[4]:='h';
name[5]:='a';
Writeln(name);
Readln;
END.

хоть и не покажет ошибок при трансляции, но ожидаемого результата (слова "masha" не выдаст).

P.S. Вообще-то странно вас учат в школе, потому как всегда считалось, что Паскаль прежде всего ориентирован на работу со всякими там строками, символами и прочим таким разным.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.02.2009, 16:20   #52 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Vladimir_S, спасибо огромное за объяснение))) Одну из задач и вопросы по ней я выложила, а про то, что Паскаль предназначен для работы со строками и символами, слышу первый раз((( В школе мы остановились на двухмерных массивах, а сейчас у нас новая тема, вообще не связанная с программированием(((
ummasha вне форума   Ответить с цитированием
Старый 09.02.2009, 17:03   #53 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ummasha Посмотреть сообщение
У меня возникло несколько вопросов:
1)Зачем здесь нужен end и почему перед ним не стоит begin;
2)Что за странное "приглашение";
3)Что требуется поставить здесь - кавычки или апострофы (в книге их вообще было 3 штуки, но программа указывала на ошибку).
Так, давайте последовательно. В Паскале существуют, если не ошибаюсь, 3 случая, когда возникает оператор "end" без предшествующего "begin". С одним из них Вы и столкнулись. Эти случаи таковы:
1. Оператор выбора ("Case"). Употребляется когда, например, нужно в зависимости от значения какой-либо целой переменной выполнить ту или иную операцию. Конечно, можно написать так:
IF i=1 THEN ... ELSE IF i=2 THEN ... ELSE IF i=3 THEN ... ну и т.п. (здесь многоточиями обозначены некие операции - неважно какие). Но лучше использовать CASE. Выглядит это так:
CASE i OF
1: ... ;
2: ... ;
3: ... ;
END;

2. - Ваш случай. Используется тип Запись (Record). Запись - это нечто вроде одномерного массива, элементами которого являются переменные РАЗНЫХ ТИПОВ. Например, Вы хотите составить некую справку по Вашим одноклассникам, указав такие данные: фамилия, возраст, пол. Вот тут очень удобно использовать тип Запись.
TYPE
Class = Record
Surname: STRING;
Age: BYTE;
Sex: Char;
END;

VAR
My_Classmates: ARRAY[1..15] of Class;

Surname, Age и Sex это так называемые ПОЛЯ записи. Как присваивать им значения? А вот как. Заполним элемент нашего массива для одной ученицы, первой в списке. Поля такие: Utjuzova, 16, w. Синтаксис такой: ИмяПеременной-Точка-ИмяПоля-Присваивание. Т.е. в данном случае:

My_Classmates[1].Surname:= 'Utjuzova';
My_Classmates[1].Age:= 16;
My_Classmates[1].Sex:= 'w';

3. Еще "end" без "begin" употребляется при написании модулей, там вместо "begin" ставится "Implementation". Но этого мы разбирать не будем.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.02.2009, 17:24   #54 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вот как раз эта программа на моем Паскале не идет по указанной в #51 причине. Но это сугубо мои проблемы.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.02.2009, 17:36   #55 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Я проверила, у меня первая программа идет, а вторая - нет(#51). Спасибо вам большое за пост #53 - подробное и доступное объяснение)))
ummasha вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.02.2009, 21:39   #56 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Решали сегодня на курсах задачу на исполнителя, но не решили. Вот текст задачи:

http://www.tehnari.ru/picture.php?al...&pictureid=395

В книге указан 4-й вариант ответа, но преподаватель не объяснил, почему, и сказал, что где-то в условии есть опечатка: то ли неправильно указано число повторов, то ли угол поворота(((
ummasha вне форума   Ответить с цитированием
Старый 10.02.2009, 22:24   #57 (permalink)
Dr. Evil
Member
 
Аватар для Dr. Evil
 
Регистрация: 18.06.2008
Сообщений: 2,326
Записей в дневнике: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 211
По умолчанию

Число повторов точно правильно -- потому что в противном случае мы не получим восьмиугольник. С градусами скорее всего напороли -- должно быть 135 (или 55 -- не до конца понимаю логику алгоритма). В данном случае мы получаем недостроенный 9-ти угольник. Достаточно вспомнить формулу из геометрии -- сумма углов любого многоугольника подчиняется формуле 180(n-2)=S, где S и есть сумма.
Далее объясню свое решение -- при повороте скорее всего мы получаем угол 180 - RT. Тогда просто считаем -- 180(n-2)=(180-RT)n Подставив RT40, получим
180n-360=140n;
40n=360
n=9
Dr. Evil вне форума   Ответить с цитированием
Старый 10.02.2009, 22:30   #58 (permalink)
ummasha
Member
 
Аватар для ummasha
 
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
По умолчанию

Но в ответах нет 9-угольника(((
ummasha вне форума   Ответить с цитированием
Старый 10.02.2009, 22:40   #59 (permalink)
Dr. Evil
Member
 
Аватар для Dr. Evil
 
Регистрация: 18.06.2008
Сообщений: 2,326
Записей в дневнике: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 211
По умолчанию

Я понимаю. Да мы его и не получим таким образом -- число поворотов маленькое. То есть мы не можем получить что-то нормальное с таким условием. Скорее всего неправильны углы, потому что
Цитата:
Сообщение от ummasha Посмотреть сообщение
в ответах нет 9-угольника(((
Dr. Evil вне форума   Ответить с цитированием
Старый 10.02.2009, 22:43   #60 (permalink)
Dr. Evil
Member
 
Аватар для Dr. Evil
 
Регистрация: 18.06.2008
Сообщений: 2,326
Записей в дневнике: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 211
По умолчанию

Кстати, вдруг кому-то интересно будет -- МГУ проводит интернет-олимпиаду по нанотехнологиям для школьников, студентов, аспирантов, научных сотрудников и т.д.

www.nanometer.ru
Dr. Evil вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:16.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.