Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рандом с именем, помогите пожалуйста найти ошибку 
:(
    Опции темы
SeTeM
Дата 7.1.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



Я только начал изучать Паскаль и решил написать маленькую программку, которая бы помогала мне при принятии решений. Еше я решил добавить возможность присваивать имена вариантам.
Столкнулся с проблемой: при показе ответа выводится только первая буква имени.
Помогите найти ошибку)
Код

PROGRAM Random_Alpha;
LABEL
     1000;
VAR
   PosledneeReshenie :REAL;
   Otvet, N, Variant :INTEGER;
   NameOfVariant :STRING;
BEGIN
     1000:
     {Чтение количества вариантов}
          WRITE('Введите количество вариантов: ');
          READLN(N);
     {Чтение имён вариантов}
          Variant := 1;
          FOR Variant := 1 TO N DO
              BEGIN
                   WRITE('Введите имя варианта №', Variant, ' = ');
                   READLN(NameOfVariant[variant]);
              END;
     {Вывод результатов}
              WRITELN('Вам выпало: ', NameOfVariant[Random(n) + 1]);
     {Последнее решение}
          WRITELN('Для выхода нажмите 1 или 2 для еше одной попытки: ');
          READLN(PosledneeReshenie);
          IF PosledneeReshenie = 2 THEN
            GOTO 1000
          ELSE IF PosledneeReshenie = 1 THEN
                 EXIT;
READLN;
END.



PM MAIL   Вверх
VanHelsing
Дата 7.1.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Что сразу бросается в глаза: 
Код

READLN(NameOfVariant[variant]);

Если так то переменную надо объявлять массивом:
Код

NameOfVariant :array[1..n] of STRING;

А можно и объявлять длину массива после того как стало известно количество вариантов.


--------------------
PM MAIL   Вверх
SeTeM
Дата 7.1.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



если написать 
Код

NameOfVariant :array[1..n] of STRING;

то пишет ошибку: "ожидание константного выражения", а мне не хочется прописывать N в константы.
PM MAIL   Вверх
VanHelsing
Дата 7.1.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Тогда поступает так. Объявляем: 
Код

NameOfVariant :array of STRING

А после получения количества значений присваиваем длину массиву:
Код

SetLength(NameOfVariant,n);

P.S. вроде ничего не путаю.



--------------------
PM MAIL   Вверх
SeTeM
Дата 7.1.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



ээ, а куда прописывать
Код

SetLength(NameOfVariant,n);
 ?
и как вообще понять это выражение? )
PM MAIL   Вверх
Dobermann
Дата 7.1.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Цитата(VanHelsing @  7.1.2009,  17:17 Найти цитируемый пост)
Если так то переменную надо объявлять массивом:

С какого перепуга?!!
PM   Вверх
THandle
Дата 7.1.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: нет
Всего: 372



VanHelsing, в Паскале нет динамических массивов.


SeTeM, проблема в том, что ты и считываешь одну букву
Код


READLN(NameOfVariant[variant]);


Даже не знаю что лучше посоветовать... Использовать масссив статической длины... С указателями работать умеешь?
И еще лучше вместо goto использовать цикл repeat..until или while..do
PM   Вверх
VanHelsing
Дата 7.1.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Цитата

VanHelsing, в Паскале нет динамических массивов.

Стыдно, перепутал Pascal c Delphi. smile 
Ну тогда THandle прав, использовать статические массивы. Объявлять константу.

Это сообщение отредактировал(а) VanHelsing - 7.1.2009, 17:41


--------------------
PM MAIL   Вверх
SeTeM
Дата 7.1.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



THandle, нет, не умею еще.
можете пожалуйста показать на примере, как правильно должно быть, а то уже совсем запутался)

Это сообщение отредактировал(а) SeTeM - 7.1.2009, 17:43
PM MAIL   Вверх
THandle
Дата 7.1.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: нет
Всего: 372



SeTeM, тогда объяви массив фиксированного размера. Да, будет много памяти кушать, но иначе не получится.видимо в данном случае.

Код

const
  ARRAY_SIZE = 512;

var
  NameOfVariant: Array[1..ARRAY_SIZE] Of String;


PM   Вверх
SeTeM
Дата 7.1.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



а можно в ARRAY_SIZE указать значение поменьше, ну хотя бы 64?
PM MAIL   Вверх
THandle
Дата 7.1.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: нет
Всего: 372



SeTeM, сколько хочешь столько и указывай. Значение ARRAY_SIZE - это максимальное количество "имен вариантов" которое ты сможешь ввести. smile
PM   Вверх
SeTeM
Дата 7.1.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2008

Репутация: нет
Всего: нет



THandle, спасибо)
и всем остальным тоже большое спасибо)
PM MAIL   Вверх
volvo877
Дата 7.1.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(THandle @  7.1.2009,  16:49 Найти цитируемый пост)
сколько хочешь столько и указывай. Значение ARRAY_SIZE - это максимальное количество "имен вариантов" которое ты сможешь ввести.
Не "сколько хочешь", а "сколько компилятор позволит"... Знать, что в Паскале нет динамических массивов, но не знать, что в том же Паскале размер ВСЕХ статических переменных ограничен 64К - странно это...

(для справки: 512 * 256 = 131072 = 128К, в 2 раза больше, чем ВСЕГО выделено подо ВСЕ переменные). Это к вопросу, который возникнет, не сомневайся, SeTeM, обязательно возникнет у тебя, "Что такое Error #96" с таким подходом к написанию программ: "Выдели места побольше, чтоб хватило"...

Это сообщение отредактировал(а) volvo877 - 7.1.2009, 18:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.