Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Вниз

Помогите с массивами   Найти похожие ветки 

 
помогите   (2002-01-02 13:42) [0]

Почему в Паскаля, когда я объявляю массив получается ошибка массив
a,b,c:array [0..240] of string;

пишет что какая-то ошибка, но если один массив, то нормально иногда еще пишет, сто переполнение сека


 
Андрей Сенченко   (2002-01-02 13:48) [1]

1. Какая то ошибка - это какая ? Можешь привести текст ?
Случаем не Error 96: Too Many Variables ?
2. Как заполяешь массив ? Приведи код, который приводит к переполнению.


 
помогите   (2002-01-02 13:50) [2]


program 47;
uses crt;
label 1,2;
var a:string;
b,c,f:array [0..240] of string; // Вот тут оштбка если несколько массивов, если объявлять один, то нормально
del,i,k:integer;
begin
ClrScr;
del:=0;
readln(a);
for i:=1 to 9 do
begin
b[i]:=a;
delete(b[i],i+1,length(a));
delete(b[i],1,i-1);
end;
for i:=1 to 9 do c[i]:=b[i];
for i:=1 to 9 do
begin
for k:=1 to i-1 do
begin
if c[i]=b[k] then goto 1
end;
f[i]:=c[i];
goto 2;
1:
del:=del+1;
2:
end;
Writeln("Полученная строка");
for i:=1 to 9 do write(" ",f[i]);
writeln;
write("Число удаленных символов ",del);
readln;


 
Андрей Сенченко   (2002-01-02 13:55) [3]

Выдержка из HELP BP 7.0

Too many variables
Global: The total size of the global variables
declared within a program or unit can"t exceed
64K.

Local: The total size of the local variables
declared within a procedure or function can"t
exceed 64K.

Не поленись - посчитай сколько памяти занимают объявленные Тобой
a,b,c:array [0..240] of string;
и все сам поймешь


 
!   (2002-01-02 13:57) [4]

A kak mne eto ispravit????


 
Андрей Сенченко   (2002-01-02 14:01) [5]

В первом же проходе цикла

for i:=1 to 9 do
begin
for k:=1 to i-1 do
begin
if c[i]=b[k] then goto 1
end;
...


Получаешь неизвестно что. Перевожу:
От i, равного 1 до 9
От k, равного 1 до 0 ( то есть до i - 1 )
...

А за Goto LABEL ... Щас Тебя MJH вообще съест




 
Андрей Сенченко   (2002-01-02 14:04) [6]

> !
В приведенном коде я лично не вижу необходимости объявлять эти массивы в размерах [0..240].


 
!   (2002-01-02 14:07) [7]

Просо мне потом нужно будет массив с размером [0..240].
А можно и сделать типа что-то вроде выделения памяти если памяти не хватает???????


 
Андрей Сенченко   (2002-01-02 14:24) [8]

program 47;
uses crt;
label 1,2;

Объявление меток в Pascal может потребоваться только в совсем уж уникальных случаях ... учись от этого отказываться.
var
а:string;
b,c,f:array [0..240] of string;
del,i,k:integer;

Судя по дальнейшему коду ( если его в корне не переписывать ) достаточно объявить array [1..9] значения "0" и "10" .. "240" Ты все-равно не используешь

Дальше не вдаваясь в исправление алгоритма:
begin
ClrScr;
del:=0;
readln(a);
for i:=1 to 9 do
begin
b[i]:=a;
delete(b[i],i+1,length(a));
delete(b[i],1,i-1);
end;
for i:=1 to 9 do c[i]:=b[i];
for i:=1 to 9 do
begin
for k:=1 to i-1 do
begin
if c[i]=b[k] then goto 1
end;
f[i]:=c[i];
goto 2;
1:
del:=del+1;
2:
end;


1. Безусловно цикл "for k:=1 to i-1 do " работать не будет, потому что верхняя граница в большинстве случаев меньше нижней.
2. Вместо использования меток гораздо естественнее использовать полностью конструкцию ( ЕСЛИ - ТО - ИНАЧЕ ):

begin
for k:=1 to i-1 do
begin
if c[i]=b[k]
then
del:=del+1 // Твоя МЕТКА 1
else // То есть ИНАЧЕ выполняем то, что обходили МЕТКОЙ 1
f[i]:=c[i];
end;
end;

Ну и здесь

Writeln("Полученная строка");
for i:=1 to 9 do write(" ",f[i]);
writeln;
write("Число удаленных символов ",del);
readln;


Если уж используешь CRT, то для ожидания нажатия клавиши пиши конструкцию типа
Repeat Until KeyPressed;

...
Это безусловно не все.


 
!   (2002-01-02 14:27) [9]

Спасибо вм Большле, Но если у меня цикл будет от 1 до 254 и мне нужен массив с размером [0..254], то что мне делать?? Может можно сделать без массива???

И на том вам большое спасибо!


 
Adder   (2002-01-02 14:34) [10]

хм... используй "кучу" :)
Вот тебе пример:
program example;
type
PMyArray=^MyArray;
TMyArray=array[0..240] of string;
var
a,b,c:PMyArray;
begin
a:=New(PMyArray);
b:=New(PMyArray);
c:=New(PMyArray);
a^[0]:="Pascal";
writeln(a^[0]);
Dispose(a);
Dispose(b);
Dispose(c);
end.


 
!   (2002-01-02 14:37) [11]

Вот то что мне и нужно было СПАСИБО!!!!


 
Андрей Сенченко   (2002-01-02 14:38) [12]

А можно как-то увидеть полностью собственно условие задачи ?


 
Андрей Сенченко   (2002-01-02 14:42) [13]

> Adder
А объяснить ? Хотя-бы в общих словах - что такое куча или где про это прочитать ? Сейчас человек вставит это в программу а что такое a^[0] - просто не поймет ...
:::)))Да и символ ^ несколько различается здесь и в Досовском редакторе ( паскаль же )


 
Adder   (2002-01-02 14:53) [14]

>Андрей Сенченко ©
Имхо, главное - "подтолкнуть" в нужном направлении...
Если человек действительно интересуется - догадается посмотреть в хелпе хотя-бы Type, New и Dispose :))
А в досовский редактор прямо отсюда вставить не получится - всё равно "ручками" набирать будет. Так что (имхо) проблемы с ^ не будет.


 
Андрей Сенченко   (2002-01-02 14:59) [15]

OFF TOPIC
Я помниться как-то минут 15 потратил, чтобы понять и ответить на вопрос "А как нарисовать снежинку" ( shift-8 )


 
Вадим   (2002-01-03 01:16) [16]

А если юзать динамические массивы?

program SuperPuperProga;
var
a: array of integer;
begin
SetLength(a, 15); // Теперь a содержит 15 элементов, нумерация начинается с 0.
a[0] := 5;
a[10] := a[0];
WriteLn(a[10]);
end.


 
Adder   (2002-01-03 01:26) [17]

2 Вадим © В Паскале ?


 
Вадим   (2002-01-03 01:44) [18]

Ага :). Не внимательно прочитал.


 
Anatoly Podgoretsky   (2002-01-03 08:10) [19]

А почему ты жирным выделил, или мы не в Паскале программируем?
Может ты хочешь сказать TPx, BPx, D1 в тех версиях Паскаля есть ограничение на размер сегмента в 64К, что легко обходится для данного размера массива


 
Сенченко Андрей   (2002-01-03 10:00) [20]

> Anatoly Podgoretsky ©

Возможно, я что-то не так понимаю, но открытые ( динамические или как их еще ) массивы появились с D4. В Turbo Pascal и Borland Pascal их не было.
Но, судя по тому что написано в коде, здесь можно обойтись без трех массивов. Поэтому я и просил привести задачу


 
Adder   (2002-01-03 11:42) [21]

>Anatoly Podgoretsky © (03.01.02 08:10)
Ну... если учесть, что ветка сюда перекочевала из основной конференции, программируем мы не не Паскале :)))
В остальном - согласна с Сенченко Андрей (03.01.02 10:00)
Но: вопрос поставлен так:
А можно и сделать типа что-то вроде выделения памяти если памяти не хватает???????
ответ: А зачем это тебе ? :-)


 
Val   (2002-01-03 12:04) [22]

Недавно помогал брату осваивать BP7, так вот - листаю книжку по нему - и что же вижу? - как раз массивы открытого типа :), сказать откуда они там-затрудняюсь, просто помню что удивился...


 
Андрей Сенченко   (2002-01-03 19:55) [23]

> Val ©(03.01.02 12:04)

Тогда совсем интересно. У меня стоит BP 7.0. На нем вот этот код:
program test;
var
a : array of integer;
i : integer;
begin
for i := 1 to 10000 do a[i]:=i+1;
end.

Выдает Error 92 ( "[" or "(." is expected ). Что собственно и показывает, что компилятор холчет увидеть границы. Или я не прав ? Каково же тогда описание и использование открытых массивов ? У меня есть литература только по версиям 5.0 и 5.5


 
Adder   (2002-01-03 21:27) [24]

>Андрей Сенченко © (03.01.02 19:55)
{$P+} или {$P-}
Options/Compiler/Open parameters
Данная директива компилятора , в зависимости от режима, позволяет или запрещает использование в качестве параметров в тексте программы массивов открытого типа.
По умолчанию {$P-}.
Имхо и всё...


 
Anatoly Podgoretsky   (2002-01-03 23:56) [25]

Сенченко Андрей (03.01.02 10:00)
Причем тут открытые массивы, речь об ограничении на размер сегмента, от открытые массивы появились в Паскале начиная с {T/B} Pascal 7


 
Андрей Сенченко   (2002-01-04 10:52) [26]

Там выше речь шла об объявлении
var
a: array of integer;

о нем я и интересовался, потому что у меня это не получалось


 
Anatoly Podgoretsky   (2002-01-04 21:14) [27]

Андрей Сенченко © (04.01.02 10:52)
Это не открытый, а динамический массив


 
Андрей Сенченко   (2002-01-05 10:58) [28]

Згачит полез читать про разницу. ... Спасибо



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.005 c
1-79342
MaxSit
2002-02-07 12:12
2002.02.25
QuickReport: Сохранение отчета в файл (TXT,HTML,DOC,.....)


14-79451
Lex
2002-01-08 18:45
2002.02.25
Почему у меня не работает функция valueexists?


14-79445
Nest
2002-01-08 09:29
2002.02.25
Как себя вучствуем полсе праздников ?... %()


1-79402
Loxly
2002-02-09 18:36
2002.02.25
Как узнать ширину (width) строки, отображаемой в TMemo?


3-79273
Hermit
2002-01-30 12:40
2002.02.25
Выборка данных из сервера в локальные таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский