Форум: "Потрепаться";
Текущий архив: 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