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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает код(загадочно), Delphi7 
V
    Опции темы
Alex103
Дата 8.12.2007, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



У меня вот такая проблемма. Есть код:

Код

program DZ_1;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Math;

type
    arr1=array of real;        // тип для одномерных массивов Y, V
    arr3=array of integer;
    arr4=array of integer;
    arr2=array of array of real;  // тип для двумерного массива W
var
    Y:arr1;             // исходный одномерный массив Y
    V:arr1;             // одномерный массив V (п.1)
    Vnew:arr1;         // одномерный массив Vnew (п.2)
    Vmin:real;         // минимальный элемент массива Vnew (п.2)
    W:arr2;             // массив (п.3)
    R:arr1;             // одномерный массив R (п.4)
    N:integer;         // количество элементов одномерных массивов
    M:integer;         // количество строк-столбцов квадратной матрицы
    A_pol:arr3;
    A_otr:arr4;
    P:real;
//-------------------------------------------------------------
//    Определение процедуры чтения данных из файла
//-------------------------------------------------------------
Procedure ReadFile(var A:arr1;var N,M:integer);
Var
    fi:text;        // файловая переменная
    i:integer;         // счетчик
begin
    // связывание файловой переменной с файлом
    AssignFile(fi,'DZ1.txt');
    Reset(fi);          // открытие текстового файла для чтения
    Readln(fi,N);        // чтение количества элементов одномерных массивов
    SetLength(A,N);    // выделение памяти одномерному массиву
    for i:=0 to N-1 do      // чтение массива А из файла
         Read(fi,A[i]);
    Readln(fi,M);        // чтение количества строк-столбцов квадратной матрицы
    CloseFile(fi);    // закрытие файла
end;
//------------------------------------------------------------- 
//  описание процедуры по пункту 1
//-------------------------------------------------------------
Procedure Proc1(var Y,V:arr1; N:integer);
Var
    i:integer;        // счетчик
begin
    for i:=0 to N-1 do    // создание массива V
         V[i]:=cos(Y[i]);
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 2
//-------------------------------------------------------------
Procedure Proc2(var A,Anew:arr1; N:integer; var A_pol_1:arr3; var A_otr_1:arr4; var P1:real);
Var
    i:integer;        // счетчик
begin
P1:=1;
for i:=0 to N-1 do
if A[i]>=0 then A_pol_1[i]:=i;
if A[i]<0 then  A_otr_1[i]:=i;
if A[i]>0 then  P1:=P1*A[i];
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 3
//-------------------------------------------------------------
Procedure Proc3(var A:arr1; var W:arr2; M:integer);
Var
    i,j:integer;    // счетчики строк и столбцов матрицы
    k:integer;    // счетчик массива А
begin
    k:=-1;
    for i:=0 to M-1 do
        for j:=0 to M-1 do
       begin
            k:=k+1;
            W[i,j]:=A[k];
       end;
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 4
//-------------------------------------------------------------
Procedure Proc4(var W:arr2; M:integer; var R:arr1);
Var
    i,j:integer;    // счетчики строк и столбцов матрицы
    P:real;    // произведение элементов столбца матрицы
begin
      // проход по столбцам матрицы
    for j:=0 to M-1 do
    begin
     // поиск произведения элементов столбца матрицы
     P:=1;
      for i:=0 to M-1 do
             P:=P*W[i,j];
        R[j]:=P;
    end;
end;
//-------------------------------------------------------------
//  описание процедуры вывода результата в файл
//-------------------------------------------------------------
Procedure WriteFile(var Y,V:arr1; N:integer;
     var W:arr2; M:integer; var A_pol_1:arr3; var A_otr_1:arr4; var P1:real);
var
    i,j:integer;    // счетчики
    fo:text;    // файловая переменная
begin
    // Файловой переменной fo назначается файл DZ1.out
    AssignFile(fo,'DZ1.out');
    Rewrite(fo);      // Текстовый файл fo открывается для записи
    WriteLn(fo,'******************************************');
    WriteLn(fo,'*          Домашнее задание №1           *');
    WriteLn(fo,'*   по курсу "Основы информационных      *');
    WriteLn(fo,'*   технологий и программирования"       *');
    WriteLn(fo,'*            (семестр 1)                 *');
    WriteLn(fo,'******************************************');
    WriteLn(fo,'*  Выполнил: ст. 212 гр.  Иванов И.И.    *');
    WriteLn(fo,'*----------------------------------------*');
    WriteLn(fo,'*  Проверил: доц. каф.304 Скоб Ю.А.      *');
    WriteLn(fo,'******************************************');
    WriteLn(fo,' Исходный массив Y:');
    for i:=0 to N-1 do
        Write(fo,Y[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 1: ****************');
    WriteLn(fo,' Новый массив V:');
    for i:=0 to N-1 do
        Write(fo,V[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 2: ****************');
    WriteLn(fo,' Произведение положитеных P = ',P:8:4);
    WriteLn(fo,' Преобразованный массив V:');
    for i:=0 to N-1 do
        Write(fo,Vnew[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 3: ****************');
    WriteLn(fo,' Новый массив W:');
    for i:=0 to M-1 do
    begin
      for j:=0 to M-1 do
            Write(fo,W[i,j]:8:4);
        WriteLn(fo);
    end;
    WriteLn(fo,'**************** Пункт 4: ****************');
    WriteLn(fo,' Новый массив R:');
    for i:=0 to M-1 do
        Write(fo,R[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'******************************************');
    CloseFile(fo);        // закрытие файл вывода fo
end;
begin
    // чтение данных из файла;
    ReadFile(Y,N,M);
    // выделение динамической памяти под массивы
    SetLength(V,N);
    SetLength(Vnew,N);
    SetLength(W,M,M);
    SetLength(R,M);
    // вызов процедуры по пункту 1 задания
    Proc1(Y,V,N);
    // вызов процедуры по пункту 2 задания
    Proc2(V,Vnew,N,A_pol,A_otr,P);
    // вызов процедуры по пункту 3 задания
    Proc3(Vnew,W,M);
    // вызов процедуры по пункту 4 задания
    Proc4(W,M,R);
    // вызов процедуры вывода результатов в файл
    WriteFile(Y,V,N,W,M,A_pol,A_otr,P);
    // освобождение динамической памяти
    Finalize(Y);
    Finalize(V);
    Finalize(Vnew);
    Finalize(W);
    Finalize(R); 
end.




Программа запускается без проблем, но она не выполняет действия. Хотя компилятор не находит ошибок. А главное что когда нажать Ф9 и держать несколько секунд то не сложно заметить на черном фоне какой-то 16-ричный код, хотя должен быть просто черный фон. Вот такие вот бока.

Вот пример текстовго файла для теста:

9
3.2 -7.7 5.3 -9.5 0.3 -1.7 9.9 -2.6 -30.1
3

Мне кажется что ошибка крутится где-то возле процедуры Proc 2 но я не могу ее найти


 ! 
Alexeis
Модератор: Название темы должно отражать ее суть!


Это сообщение отредактировал(а) Alexeis - 10.12.2007, 11:11


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
volvo877
Дата 8.12.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Во-первых, в задаче используются уже Дельфийские динамические массивы, так что будь добр подобные вопросы задавать в разделе Дельфи... Паскаль тут ни при чем.

Ну, а во-вторых, ошибка у тебя как раз в том, что ты не умеешь пользоваться этими массивами (а, заодно, и отладчиком, видимо)... 

Код

Procedure Proc2(var A,Anew:arr1; N:integer; var A_pol_1:arr3; var A_otr_1:arr4; var P1:real);
Var
    i:integer;
begin
  // У тебя где-то для A_pol_1 (и для A_otr_1 заодно) установлен размер ???

  ... 
end;

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



Ну а как этот размер установить



--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
tommy256
Дата 8.12.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Alex103 @ 8.12.2007,  15:23)
Ну а как этот размер установить


С помощью процедуры SetLength(A1,X);
где А1 - массив, Х - количество элементов
PM MAIL ICQ   Вверх
Alex103
Дата 9.12.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



А посотрите на этот код. Сдесь уже массиву задан размер а он не работает.

Код


program DZ1;
{$APPTYPE CONSOLE}
Uses
    SysUtils,
    Math;
type
    arr1=array of real;        // тип для одномерных массивов Y, V
    arr2=array of array of real;  // тип для двумерного массива W
var
    Y:arr1;             // исходный одномерный массив Y
    V:arr1;             // одномерный массив V (п.1)
    Vnew:arr1;         // одномерный массив Vnew (п.2)
    Vmin:real;         // минимальный элемент массива Vnew (п.2)
    W:arr2;             // массив (п.3)
    R:arr1;             // одномерный массив R (п.4)
    N:integer;         // количество элементов одномерных массивов
    M:integer;         // количество строк-столбцов квадратной матрицы
//-------------------------------------------------------------
//    Определение процедуры чтения данных из файла
//-------------------------------------------------------------
Procedure ReadFile(var A:arr1;var N,M:integer);
Var
    fi:text;        // файловая переменная
    i:integer;         // счетчик
begin
    // связывание файловой переменной с файлом
    AssignFile(fi,'DZ1.txt');
    Reset(fi);          // открытие текстового файла для чтения
    Readln(fi,N);        // чтение количества элементов одномерных массивов
    SetLength(A,N);    // выделение памяти одномерному массиву
    for i:=0 to N-1 do      // чтение массива А из файла
         Read(fi,A[i]);
    Readln(fi,M);        // чтение количества строк-столбцов квадратной матрицы
    CloseFile(fi);    // закрытие файла
end;
//------------------------------------------------------------- 
//  описание процедуры по пункту 1
//-------------------------------------------------------------
Procedure Proc1(var Y,V:arr1; N:integer);
Var
    i:integer;        // счетчик
begin
    for i:=0 to N-1 do    // создание массива V
         V[i]:=cos(Y[i]);
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 2
//-------------------------------------------------------------
Procedure Proc2(var A,Anew:arr1; var Amin:real; N:integer);
Var
    i:integer;        // счетчик
begin
      // поиск минимального элемента массива А
    Amin:=A[0];
    for i:=0 to N-1 do
            if A[i]<Amin then Amin:=A[i];
      // преобразование массива А в массив Anew
    for i:=0 to N-1 do
    begin
         if(A[i]>0)then
             Anew[i]:=power(A[i],3)
     else
             Anew[i]:=Amin;
    end;
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 3
//-------------------------------------------------------------
Procedure Proc3(var A:arr1; var W:arr2; M:integer);
Var
    i,j:integer;    // счетчики строк и столбцов матрицы
    k:integer;    // счетчик массива А
begin
    k:=-1;
    for i:=0 to M-1 do
        for j:=0 to M-1 do
       begin
            k:=k+1;
            W[i,j]:=A[k];
       end;
end;
//-------------------------------------------------------------
//  описание процедуры по пункту 4
//-------------------------------------------------------------
Procedure Proc4(var W:arr2; M:integer; var R:arr1);
Var
    i,j:integer;    // счетчики строк и столбцов матрицы
    buf:real;    // произведение элементов столбца матрицы
begin
      // проход по столбцам матрицы
    for j:=0 to N-1 do
    begin
      for i:=0 to N-1 do
       if W[i,j]>W[i,j+1] then
          begin
           buf := W[i,j];
           W[i,j]:=W[i,j+1];
           W[i,j+1]:=buf;
          end;
    end;
end;
//-------------------------------------------------------------
//  описание процедуры вывода результата в файл
//-------------------------------------------------------------
Procedure WriteFile(var Y,V,Vnew:arr1; N:integer; var Vmin:real;
     var W:arr2; M:integer; var R:arr1);
var
    i,j:integer;    // счетчики
    fo:text;    // файловая переменная
begin
    // Файловой переменной fo назначается файл DZ1.out
    AssignFile(fo,'DZ1.out');
    Rewrite(fo);      // Текстовый файл fo открывается для записи
    WriteLn(fo,'******************************************');
    WriteLn(fo,'*          Домашнее задание №1           *');
    WriteLn(fo,'*   по курсу "Основы информационных      *');
    WriteLn(fo,'*   технологий и программирования"       *');
    WriteLn(fo,'*            (семестр 1)                 *');
    WriteLn(fo,'******************************************');
    WriteLn(fo,'*  Выполнил: ст. 212 гр.  Иванов И.И.    *');
    WriteLn(fo,'*----------------------------------------*');
    WriteLn(fo,'*  Проверил: доц. каф.304 Скоб Ю.А.      *');
    WriteLn(fo,'******************************************');
    WriteLn(fo,' Исходный массив Y:');
    for i:=0 to N-1 do
        Write(fo,Y[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 1: ****************');
    WriteLn(fo,' Новый массив V:');
    for i:=0 to N-1 do
        Write(fo,V[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 2: ****************');
    WriteLn(fo,' Минимальный элемент массива Vmin = ',Vmin:8:4);
    WriteLn(fo,' Преобразованный массив V:');
    for i:=0 to N-1 do
        Write(fo,Vnew[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'**************** Пункт 3: ****************');
    WriteLn(fo,' Новый массив W:');
    for i:=0 to M-1 do
    begin
      for j:=0 to M-1 do
            Write(fo,W[i,j]:8:4);
        WriteLn(fo);
    end;
    WriteLn(fo,'**************** Пункт 4: ****************');
    WriteLn(fo,' Новый массив R:');
    for i:=0 to M-1 do
        Write(fo,R[i]:8:4);
    WriteLn(fo);
    WriteLn(fo,'******************************************');
    CloseFile(fo);        // закрытие файл вывода fo
end;
begin
    // чтение данных из файла;
    ReadFile(Y,N,M);
    // выделение динамической памяти под массивы
    SetLength(V,N);
    SetLength(Vnew,N);
    SetLength(W,M,M);
    SetLength(R,M);
    // вызов процедуры по пункту 1 задания
    Proc1(Y,V,N);
    // вызов процедуры по пункту 2 задания
    Proc2(V,Vnew,Vmin,N);
    // вызов процедуры по пункту 3 задания
    Proc3(Vnew,W,M);
    // вызов процедуры по пункту 4 задания
    Proc4(W,M,R);
    // вызов процедуры вывода результатов в файл
    WriteFile(Y,V,Vnew,N,Vmin,W,M,R);
    // освобождение динамической памяти
    Finalize(Y);
    Finalize(V);
    Finalize(Vnew);
    Finalize(W);
    Finalize(R); 
end.




--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
Alex103
Дата 9.12.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



Спасибо.   Тема закрыта...


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
VICTAR
Дата 9.12.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Alex103 @  9.12.2007,  14:25 Найти цитируемый пост)
 Тема закрыта... 

Тогда поставь галочку smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

1. Публиковать ссылки на вскрытые компоненты

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

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


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

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


 




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


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

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