Зрасти всем!)
Не буду выклаывать всю задачу целиком, тк кое что знаю как делать... а вот что не знаю... Думаю вы мне в этом поможете, надеюсь очень
В текстовом файле содержится последовательность действительных чисел. ...зделать это, зделать то и так далее...
Хочу представить ету последовательность в виде массива (и вывести его на экран), но не простого, а двумерного, дабы в дальнейшем накручивать на него то что требует задача. Как это зделать? Я не понимаю((.
(нашел решенную заачу в инету, похожую). Но там применена сверх логика, не моего уровня(( Ни че не понял кроме того что крюто все там завернуто
Каким образом превратить задуманное в действительлность? буду рад, если хотябы покажите как это будет выглядеть с ономерным массивом.
Спасибо за внимание.
ЗЫ яндех юзал если чо. ни чего более привлекатеьного как задать вопрос тут не нашел
А что ты хочешь видеть в двумерном массиве? Одна строка - эти твои действительные числа, а вторая? Пока пустые ячейки, которые потом будешь использовать?
Что именно непонятно? Как реализовать массив, размеры которого будут задаваться при выполнении программы? Или как прочитать в него данные из файла?
По первому варианту читай здесь: FAQ: http://forum.pascal.net.ru/index.php?s=&showtopic=6730&view=findpost&p=28387
По второму - пользуйся поиском, я где-то на форуме выкладывал несколько вариантов чтения данных из файла (с разными разделителями)...
1 в двумерном массиве я хочу видеть эти самые числа из стоки из файла... тоесть и первая и вторая строка будут одинаковы и буут содержать числа из заданной последовательности
2 непонятно как реализовать массив. количество элементов в стоке соответствует количеству элементов послеовательности из файла.
3 Или как прочитать в него данные из файла? максимум чего я пока добился это вывод на экран последнено элемента последовательности, остальные ге то теряются, я даже краешком мозга понимаю где и в чем дело, но ни как не соображу как и что поправить((
4 ага, спасибо) щас ознакомлюсь со ссылочкой.
Извините что сразу так невнятно накалякал...
Раз какой-то код уже есть - может, выложишь его?
да, конечно. я тут кое что прочел полезного на форуме, попытаюсь реализовать... заработает, кину код. не заработает-темболее.
Ниже приписан код.
всегда ссылается на mxArr^[i] := Number; выдавая вот такую ошибку
[Error] Var_5_Zad_03.dpr(39): Incompatible types: 'Real' and 'PVector'
Старался делать как тут - http://forum.pascal.net.ru/index.php?showtopic=6730&st=0&p=28387entry28387 Подскажите пожалуйста в чем я ошибаюсь!
program mxArr;
{$APPTYPE CONSOLE}
{$R-}
uses
SysUtils,
Russian;
type
TType = Real;
type
PVector = ^TVector;
TVector = array[1..1] of TType;
PDynMatrix = ^TDynMatrix;
TDynMatrix = array[1..1] of PVector;
var
TextFile : Text;
TextName : string;
mxArr : PDynMatrix;
Number : Real;
i, j, N : byte;
begin
Writeln; Write(Rus(' Имя Файла: ')); Readln(TextName); Writeln;
Write('N = '); Readln(N); Writeln; // кол-во чисел в послеовательности
Assign(TextFile, TextName);
Reset(TextFile);
GetMem(mxArr, N * SizeOf(PVector));
for i := 1 to N do
while not Eof (TextFile) do
begin
Read(TextFile, Number);
mxArr^[i] := Number;
GetMem(mxArr^[i], N * SizeOf(TType));
end;
for i := 1 to N do
begin
Writeln;
for j := 1 to N do
Write(mxArr^[i]^[j]:3);
end;
for i := 1 to N do
FreeMem(mxArr^[i], N * SizeOf(TType));
FreeMem(mxArr, N * SizeOf(PVector));
Close(TextFile);
Readln;
end.
А модуль Russian мы должны сами написать?
Добавлено через 8 мин.
Assign(TextFile, TextName);
Reset(TextFile);
GetMem(mxArr, 2 * SizeOf(PVector)); // выделяешь память под указатели 2 строки
for i := 1 to 2 do
GetMem(mxArr^[i], N * SizeOf(TType)); // это - собственно выделение памяти под 2 строки
i := 1;
while not Eof (TextFile) do begin
Read(TextFile, Number);
mxArr^[1]^[i] := Number; // пишешь одно и то же и в первую
mxArr^[2]^[i] := Number; // .. и во вторую строку
inc(i);
end;
for i := 1 to 2 do
begin
Writeln;
for j := 1 to N do
Write(mxArr^[i]^[j]:3);
end;
for i := 1 to 2 do
FreeMem(mxArr^[i], N * SizeOf(TType));
FreeMem(mxArr, 2 * SizeOf(PVector));
Для начала мне было бы здорово понять как из заданной строки создать матрицу с одинаковыми строками и вывести ее на экран. Сколько строк, две или три, не столь вашно, главное что не одна...
volvo, попробывал ваш пример. но на строке mxArr^[2]^[i] := Number; получаю
[Error] Var_5_Zad_03.dpr(44): Constant expression violates subrange bounds
может я что то напутал в разделах TYPE и VAR ? чотя ни чего вроде не забыл.
Вот этот код только что отработал так, как ты хотел (Delphi 6):
program arr;Это тебе нужно было?
{$APPTYPE CONSOLE}
uses
SysUtils;
{$R-}
type
TType = Real;
type
PVector = ^TVector;
TVector = array[1..1] of TType;
PDynMatrix = ^TDynMatrix;
TDynMatrix = array[1..1] of PVector;
var
TextFile : Text;
TextName : string;
mxArr : PDynMatrix;
Number : Real;
i, j, N, count : byte;
begin
// Writeln; Write(Rus(' ??? ?????: ')); Readln(TextName); Writeln;
TextName := 't.txt'; // Поменяй на ввод имени файла
Write('N = '); Readln(N); Writeln;
Assign(TextFile, TextName);
Reset(TextFile);
GetMem(mxArr, 2 * SizeOf(PVector));
for i := 1 to 2 do
GetMem(mxArr^[i], N * SizeOf(TType));
i := 1;
while not SeekEof (TextFile) do begin
Read(TextFile, Number);
j := 1; mxArr^[j]^[i] := Number; // Обманываем компилятор - с переменными это работает
j := 2; mxArr^[j]^[i] := Number;
inc(i);
end;
count := i - 1; // Это - количество чисел, прочитанных из файла, если N вводилось "с запасом"
writeln('count = ', count);
for i := 1 to 2 do
begin
Writeln;
for j := 1 to count do // Печатаем столько, сколько прочли
Write(mxArr^[i]^[j]:6:2);
end;
for i := 1 to 2 do
FreeMem(mxArr^[i], N * SizeOf(TType));
FreeMem(mxArr, 2 * SizeOf(PVector));
Close(TextFile);
Readln;
end.
Да, именно то! И количество строк в коде можно увеличивать!
Благодарю!! Буду разбираться дальше.. Спасибо