Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2] 3  Все   Вниз
  Печать  
Автор Тема: Снова "многомерные" массивы (вырезка)  (Прочитано 54193 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #30 : 07-05-2006 19:40 » 

Ок, ребят. Вижу желание поспорить. У меня ща времени нет. У меня нет цели доказывать свою правоту - мне это нафиг не надо. Кто хочет моего совета и опыта пожалуйста.

Поэтому коротко.

Димка зря обижаешься. Где логика? Зачем МНЕ на ТЕБЯ наезжать. Я же сказал, что не хочу никого обижать. И если я говорю ошибка, то значит я вижу ошибку. А доказательства ты бы увидел сам если бы в 102 написал тело ф-ций. Ты не передал в ф-ю размерность массива. В этом ошибка. И дело не в том, что твои решения альтернативны, а в том, что они содержат ошибку. Я понимаю, есть люди, которым это очень тяжело признавать (сам такой). Тем более сам грешу, когда привожу ошибочные примеры (случаи были). Но исправляться никогда не поздно.

Твой код в 102 содержит эти ошибки:
Код:
void f(int a[]) { ... }
...
int a[10];
f(a);

void f(int a[10][]) { ... }
...
int a[10][10];
f(a);

В ф-ю надо передать размерность, которую потом проверить. Или не так?  Как ты собираешься проверить границы массива? Это же элементарно. Об это споткнёшся сразу как только напишешь тело ф-ции - ты этого не сделал.

В 110 и 114 ты ловко вывернулся объявив константы. Поэтому был мой 115.

Ну и поскольку ты не можешь нормально разговаривать как взрослый человек, а хочешь пообижаться, и видишь в замечаниях только попытку тебя обидеть, я тебе больше отвечать не буду, дабы дальше не обижать. Сорри. Я не обиделся, просто не хочется обижать кого-то вольно, или невольно.


Кхе, кхе. Не кипятись, Джон Улыбаюсь.

Может быть и прав. Меня тут аллергия сильно придавила. Уже неделю таблетки принимаю. Башка не работает на 100% - отсюда раздражённость.

nikedeforest, ты всё-таки не хочешь понять о чём я говорю? Или просто ещё не до конца представил себе ситуёвину? Я не против термина двумерный многомерный. Тем более, что первое предложение - копия Страуструпа. Ага

Ок, раз уж на то пошло - для меня библия С++ - Страуструп. Кто может лучше папы знать своё дитятко? Итак раз уж хочется цитат титанов, их есть у меня. Кстати "почти по Джону" - это тоже шутка. Ага Тем не менее рекомендую прочитать всё:

из пункта 2.3.6 Массивы:

Цитата
Многомерные массивы представлены как массивы массивов.

...

Ниже описывается
массив из двух элементов, каждый из которых является, в свою очередь,
массивом из 5 элементов типа char:

      char v[2][5];


Про передачу в ф-ю массива - целый топик:

Цитата
      4.6.5 Параметр-массив

 Если в качестве параметра функции указан массив, то передается
 указатель на его первый элемент. Например:
Код:
         int strlen(const char*);

         void f()
         {
           char v[] = "массив";
           strlen(v);
           strlen("Николай");
         }
Это означает, что фактический параметр типа T[] преобразуется к типу T*,
 и затем передается. Поэтому присваивание элементу формального
 параметра-массива изменяет  этот элемент. Иными словами,
 массивы отличаются от других типов тем, что они не передаются
 и не могут передаваться по значению.
    В вызываемой функции размер передаваемого массива неизвестен.
 Это неприятно, но есть несколько способов обойти данную трудность.
 Прежде всего, все строки оканчиваются нулевым символом, и значит их
 размер легко вычислить. Можно передавать еще один параметр,
 задающий размер массива. Другой способ: определить
 структуру, содержащую указатель на массив и размер массива, и
 передавать ее как параметр (см. также $1.2.5). Например:
Код:
         void compute1(int* vec_ptr, int vec_size);  // 1-ый способ

         struct vec {               // 2-ой способ
           int* ptr;
           int size;
         };

         void compute2(vec v);
   Сложнее с многомерными массивами, но часто вместо них можно
 использовать массив указателей, сведя эти случаи к одномерным
 массивам. Например:
Код:
        char* day[] = {
            "mon", "tue", "wed", "thu", "fri", "sat", "sun"
        };
Теперь рассмотрим функцию, работающую с двумерным массивом - матрицей.
 Если размеры обоих индексов известны на этапе трансляции, то
 проблем нет:
Код:
        void print_m34(int m[3][4])
        {
           for (int i = 0; i<3; i++) {
               for (int j = 0; j<4; J++)
                   cout << ' ' << m[i][j];
               cout << '\n';
          }
        }
   Конечно, матрица по-прежнему передается как указатель, а размерности
приведены просто для полноты описания.
   Первая размерность для вычисления адреса элемента неважна
($R.8.2.4), поэтому ее можно передавать как параметр:
Код:
       void print_mi4(int m[][4], int dim1)
       {
          for ( int i = 0; i<dim1; i++) {
              for ( int j = 0; j<4; j++)
                  cout << ' ' << m[i][j];
              cout << '\n';
          }
       }
    Самый сложный случай - когда надо передавать обе размерности.
 Здесь "очевидное" решение просто непригодно:
Код:
      void print_mij(int m[][], int dim1, int dim2)   // ошибка
      {
        for ( int i = 0; i<dim1; i++) {
            for ( int j = 0; j<dim2; j++)
                cout << ' ' << m[i][j];
            cout << '\n';
        }
     }
Во-первых, описание параметра m[][] недопустимо, поскольку для
 вычисления адреса элемента многомерного массива нужно знать
 вторую размерность. Во-вторых, выражение m[i ][j]
 вычисляется как *(*(m+i)+j), а это, по всей видимости, не то, что
 имел в виду программист. Приведем правильное решение:
Код:
        void print_mij(int** m, int dim1, int dim2)
        {
           for (int i = 0; i< dim1; i++) {
               for (int j = 0; j<dim2; j++)
                 cout << ' ' << ((int*)m)[i*dim2+j];  // запутано
               cout << '\n';
          }
        }
Выражение, используемое для выбора элемента матрицы, эквивалентно
 тому, которое создает для этой же цели транслятор, когда известна
 последняя размерность. Можно ввести дополнительную переменную,
 чтобы это выражение стало понятнее:
Код:
       int* v = (int*)m;
       // ...
       v[i*dim2+j]

Топика "Многомерные массивы" я не нашёл. Наверно Страуструп не читал Шилдта (ЭТО ШУТКА!!!) Ага

Кстати ф-я print_mij это практически то, что надо Carrie Bradshaw. Ещё одно доказательство. Только судя по всему это нафиг никому не надо. Жаль

Лёш, в иконках самая правая - разделить тему. Там выберешь - "выбрать топики". Перекидываешь в правое которые надо. Потом выбираешь цель-тему.
Ну соответственно параметры название темы, известить и тд  - разберёшься
Лучше потренируйся на парочке тестовых тем, "Чтобы не было мучительно больно" Ага

Вить, согласен, но споров больше не будет. Во всяком случае с моей стороны. Я уже сказал - я не теоретик, красиво говорить не умею (может в этом всё проблема?), а своим опытом поделюсь с каждым кто в нём нуждается. Если руки дойдут я сам всё перенесу, кстати там в той теме тоже надо флуд подчистить.
« Последнее редактирование: 04-12-2007 19:39 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #31 : 07-05-2006 19:47 » 

nikedeforest, я думаю на твой "не совсем прав" - я уже ответил.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 07-05-2006 20:07 » 

Цитата: Джон
Твой код в 102 содержит эти ошибки:
Какой же это код? Это схема кода - концепция. Там лишь ошибка в не той неопределённой размерности для двумерного массива. Твои слова про код я отнёс к последнему коду - пост #114. Вот там код.
Цитата: Джон
В ф-ю надо передать размерность, которую потом проверить. Или не так?  Как ты собираешься проверить границы массива? Это же элементарно. Об это споткнёшся сразу как только напишешь тело ф-ции - ты этого не сделал.
Размерности могут передаваться через глобальные переменные или константы, определяться в define'ах. Так что не стоит устраивать "охоты на ведьм" и ловить "ловкачей" за руки. Будто тебя здесь кто-то намеренно пытается обмануть. Смотри лишь на то, что написано, и не "додумывай" от себя. Приведённая в #102 схема отнюдь не преследовала цель продемонстрировать готовое и предназначенное к компиляции, да ещё ко всему прочему элегантное и универсальное решение, а просто описание массива как параметра функции.
« Последнее редактирование: 06-12-2007 18:08 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
alliance
Постоялец

ru
Offline Offline

« Ответ #33 : 04-06-2008 15:34 » 

Здравствуйте уважаемые программисты завис над задачей в двух файлах содержатся матрицы в третий файл записать результат умножения этих матриц, первая матрица размерность m*n , вторая n*k массивы выделить динамически
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 04-06-2008 16:18 » 

щас подумаем
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 04-06-2008 16:44 » 

примерно так у меня вышло (компилировал, но не отлаживал, предоставляю тебе Улыбаюсь )

Код:
//структура для временного массива
struct s_Buffer
{
double* m_pBuf;
DWORD m_xmax;
DWORD m_ymax;

s_Buffer(DWORD xmax,DWORD ymax)
{
m_pBuf=0;
m_xmax=0;
m_ymax=0;

DWORD dwdLen=xmax*ymax;
if(!dwdLen)return;

m_pBuf=new double[dwdLen];

if(!m_pBuf)return;

m_xmax=xmax;
m_ymax=ymax;
}

~s_Buffer()
{
if(m_pBuf)
{
delete [] m_pBuf;
m_pBuf=0;
}
}

inline double* get_x_y(DWORD x_zb,DWORD y_zb)
{
if(x_zb<m_xmax && y_zb<m_ymax)
{
return &m_pBuf[y_zb*m_xmax+x_zb];
}
else
{
return 0;
}

}

};

int main()
{
DWORD m=10;
DWORD n=5;
DWORD k=30;

//M1   .---n-----
//    m|
//     |
//

//M2   .---k--
//    n|
//     |
//

//M3   .---m--
//    k|
//     |
//


s_Buffer M1(m,n);
s_Buffer M2(n,k);
s_Buffer M3(k,m);

DWORD dwdm;
DWORD dwdk;
DWORD dwdn;
if(M1.m_pBuf && M2.m_pBuf && M3.m_pBuf)
{
for(dwdm=0;dwdm<m;dwdm++)
{
for(dwdk=0;dwdk<m;dwdk++)
{
double dSum=0;

for(dwdn=0;dwdn<n;dwdn++)
{
dSum+= *M1.get_x_y(m,n) * *M2.get_x_y(n,k);
}

*M3.get_x_y(m,k)=dSum;
}
}
}
}

« Последнее редактирование: 04-06-2008 16:46 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 04-06-2008 17:02 » 

Алексей1153++, ужас какой... надо так
Код: (Ruby)
require 'mathn'

def loadMatrix(fileName)
    rows = Array.new
    for line in File.open(fileName) do
        row = line.split.map do | item |
            item.to_i
        end    
        rows.push(row)
    end
    return Matrix.rows(rows)
end

def saveMatrix(matrix, fileName)
    File.open(fileName, 'w') do | stream |
        for row in matrix.to_a do
            stream.puts(row.join(' '))
        end
    end
end

saveMatrix(loadMatrix(ARGV[0]) * loadMatrix(ARGV[1]), ARGV[2])
Улыбаюсь
« Последнее редактирование: 04-06-2008 17:32 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 04-06-2008 17:05 » 

dimka, Отлично
Записан

alliance
Постоялец

ru
Offline Offline

« Ответ #38 : 04-06-2008 17:13 » 

спасибо  Здесь была моя ладья... Не понял Улыбаюсь
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #39 : 05-06-2008 16:03 » 

в общем алгоритм знаю, но у меня загвоздка, нужно из файла считать в линейный массив целые числа матрицы, количество чисел заранее неизвестно, он мне почемуто через одно число считывает можнте подсказать, где ошибка б, вот код :

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
void main ()
{
FILE *f1;//,*f2,*f3;
int i=0,j=0,ch=0,b=0,k=0,**str1,**str2,a1[100]={0},*a2;
clrscr();
if ((f1=fopen("c:/1.dat","r"))==NULL)
{
perror("1.dat");

}
//f2=fopen("d:\2.txt","r");
//f3=fopen("d:\3.txt","w");

//ch=getc(f1);
while(fscanf(f1,"%d",&ch)!=EOF)
//for(b=0;b<10;b++)
{
fscanf(f1,"%d",&ch);


a1=ch;
i++;
}
//cout<<i;
for(b=0;b<i;b++)
cout<<a1;
fclose(f1);
getch();
}
 
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #40 : 05-06-2008 16:04 » 

код помятый, но все же
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 05-06-2008 16:06 » 

alliance, так ты его отредактируй - оберни код тегами [code]....[/code].
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
alliance
Постоялец

ru
Offline Offline

« Ответ #42 : 05-06-2008 16:12 » 

Код:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
void main ()
{
FILE *f1;
int i=0,j=0,ch=0,b=0,k=0,**str1,**str2,*a1={0},*a2;
clrscr();
if ((f1=fopen("c:/1.dat","r"))==NULL)
{
perror("1.dat");
}

while(fscanf(f1,"%d",&ch)!=EOF)
{
fscanf(f1,"%d",&ch);
a1[i]=ch;
i++;
}
for(b=0;b<i;b++)
cout<<a1[b];
fclose(f1);
getch();
}
« Последнее редактирование: 05-06-2008 16:19 от alliance » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #43 : 05-06-2008 17:29 » 

alliance, Проблема в том, что ты один раз читаеш числа для проверки конца файла, а второй раз внутри цикла, вот там твое "через одно" и возникает.
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #44 : 05-06-2008 17:42 » 

а как нужно ? исправь пожалуйста
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #45 : 05-06-2008 17:59 » 

ну как-то так
Код:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
void main ()
{
FILE *f1;
int i=0,j=0,ch=0,b=0,k=0,**str1,**str2,a1[ 100 ]={0},*a2;
clrscr();
if ((f1=fopen("c:/1.dat","r"))==NULL)
{
perror("1.dat");
return;
}

while(!feof(f1))
{
fscanf(f1,"%d",&ch);
a1[i]=ch;
i++;
}
for(b=0;b<i;b++)
cout<<a1[b];
fclose(f1);
getch();
}
Да и вообще с такими задачами тебе либо надо основательно разбирать работу с памятью, потому что сейчас у тебя все будет работать до того момента пока количество чисел не перевалит за 100, либо изучай стандартные STL-евские контейнеры типа vector
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #46 : 05-06-2008 18:25 » 

Код:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main ()
{
FILE *f1,*f2;
int i=0,j=0,ch1=0,ch2=0,b=0,k=0,c=0,**str1,**str2,*a1={0},*a2={0},**str3={0},sum=0,i1=0,j1=0;
clrscr();

if ((f1=fopen("c:/1.dat","r"))==NULL)
{
perror("1.dat");
}

if ((f2=fopen("c:/2.dat","r"))==NULL)
{
perror("2.dat");
}

while(!feof(f1))
{
fscanf(f1,"%d",&ch1);
a1[i1]=ch1;
i1++;
}
i=i1-1;

str1=new  *[i];
for(b=0;b<i;b++)
str1[b]=new [i];
cout<<"perwaya matrica : \n";

for(b=0;b<sqrt(i);b++)
for(k=0;k<sqrt(i);k++)
{
str1[b][k]=a1[c];
c++;
}
for(b=0;b<sqrt(i);b++)
{
cout<<"\n";
for(k=0;k<sqrt(i);k++)
cout<<str1[b][k]<<" ";
}

cout<<"\n";

while(!feof(f2))
{
fscanf(f2,"%d",&ch2);
a2[j1]=ch2;
j1++;
}
j=j1-1;

if(i!= j)
{
cout<<" fatal error ";
exit(0);
}

str2=new  *[j];
for(b=0;b<j;b++)
str2[b]=new [j];
c=0;
cout<<"\n";
cout<<"wtoraya matrica : \n";
for(b=0;b<sqrt(j);b++)
for(k=0;k<sqrt(j);k++)
{
str2[b][k]=a2[c];
c++;
}

for(b=0;b<sqrt(j);b++)
{
cout<<"\n";
for(k=0;k<sqrt(j);k++)
cout<<str2[b][k]<<" ";
}

str3=new* [j];
for(b=0;b<j;b++)
str3[b]=new [j];
c=0;

for(i=0;i<3;i++)
{
sum=0;
for(k=0;k<3;k++)
{
sum=0;
for(j=0;j<3;j++)
{
sum=sum+(str1[i][j]*str2[j][k]);
}
str3[i][k]=sum;
}
}
cout<<"\n";


cout<<"\n";
cout<<"proiswedenie matric : \n";
for(i=0;i<3;i++)
{
cout<<"\n";
for(k=0;k<3;k++)
cout<<str3[i][k]<<" ";
}





fclose(f1);
fclose(f2);

getch();
}
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #47 : 05-06-2008 18:26 » 

Доделал, спасибо за подсказки
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #48 : 05-06-2008 20:24 » 

Код:
str2=new  *[j];
for(b=0;b<j;b++)
str2[b]=new [j];
подскажите, как память освободить
« Последнее редактирование: 06-06-2008 06:34 от alliance » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #49 : 06-06-2008 05:49 » 

Осторожнее с feof() !!! Эта ф-ия возвращает корректное значение только после операции чтения. Т.е., если ниодной операции не было и файл пустой, то будет ошибочное чтение.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
alliance
Постоялец

ru
Offline Offline

« Ответ #50 : 06-06-2008 06:37 » 

у меня например 9 чисел  фйле, он их выводит, но счетчик показывает 10 чисел
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #51 : 06-06-2008 06:39 » 

Код:

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main ()
{
FILE *f1,*f2;
int i=0,j=0,ch1=0,ch2=0,b=0,k=0,c=0,**str1={0},**str2={0},*a12={0},*a22={0},**str3={0},sum=0,i1=0,j1=0;
int symbol;
float a1,b1,c1,a2,b2,c2;
double x,y;
m1:

clrscr();
cout<<" 1 - SYSTEM OF LINE EQUATIONS \n 2 - MULTIPLICATION OF MATRIXES \n 0 - EXIT";
cout<<"\nINSERT MENU ITEM: ";
cin>>symbol;
switch (symbol)
{
case 2 :


if ((f1=fopen("c:/1.dat","r"))==NULL)
{
perror("1.dat");
}

if ((f2=fopen("c:/2.dat","r"))==NULL)
{
perror("2.dat");
}

while(!feof(f1))
{
fscanf(f1,"%d",&ch1);
a12[i1]=ch1;
i1++;
}
i=i1-1;

str1=new  *[i];
for(b=0;b<i;b++)
str1[b]=new [i];
cout<<"FIRST MATRIX (A): \n";

for(b=0;b<sqrt(i);b++)
for(k=0;k<sqrt(i);k++)
{
str1[b][k]=a12[c];
c++;
}
for(b=0;b<sqrt(i);b++)
{
cout<<"\n";
for(k=0;k<sqrt(i);k++)
cout<<str1[b][k]<<" ";
}

cout<<"\n";

while(!feof(f2))
{
fscanf(f2,"%d",&ch2);
a22[j1]=ch2;
j1++;
}
j=j1-1;

if(i!= j)
{
cout<<" FATAL ERROR!\n";
cout<<"\nPRESS ANY KEY FROM BACK TO MAIN MENU!";
getch();
goto m1;
}

str2=new  *[j];
for(b=0;b<j;b++)
str2[b]=new [j];
c=0;
cout<<"\n";
cout<<"SECOND MATRIX (B): \n";
for(b=0;b<sqrt(j);b++)
for(k=0;k<sqrt(j);k++)
{
str2[b][k]=a22[c];
c++;
}

for(b=0;b<sqrt(j);b++)
{
cout<<"\n";
for(k=0;k<sqrt(j);k++)
cout<<str2[b][k]<<" ";
}

str3=new* [j];
for(b=0;b<j;b++)
str3[b]=new [j];
c=0;

for(i=0;i<sqrt(j);i++)
{
sum=0;
for(k=0;k<sqrt(j);k++)
{
sum=0;
for(b=0;b<sqrt(j);b++)
{
sum=sum+(str1[i][b]*str2[b][k]);
}
str3[i][k]=sum;
}
}
cout<<"\n";


cout<<"\n";
cout<<"RESULT MATRIX (A*B): \n";
for(i=0;i<sqrt(j);i++)
{
cout<<"\n";
for(k=0;k<sqrt(j);k++)
cout<<str3[i][k]<<" ";
}

fclose(f1);
fclose(f2);
cout<<"\n";
cout<<"\nPRESS ANY KEY FROM BACK TO MAIN MENU!";
getch();
goto m1;
break;

case 1:

cout<<"DESCRIBE THE FIRST EQUATION OF SYSTEM:\n";
cout<<"\nA1=";
 cin>>a1;
 cout<<"B1=";
 cin>>b1;
 cout<<"C1=";
 cin>>c1;
 cout<<"\nDECRIBE THE SECOND EQUATION OF SYSTEM:"<<endl;
 cout<<"\nA2=";
 cin>>a2;
 cout<<"B2=";
 cin>>b2;
 cout<<"C2=";
 cin>>c2;

 if ((a1*b2-b1*a2)!=0)
   {
    x=(c1*b2-b1*c2)/(a1*b2-b1*a2);
    y=(a1*c2-c1*a2)/(a1*b2-b1*a2);
    cout<<endl<<"THE EQUATION HAS ONE DECISION:\n";
    cout<<"\nX="<<x;
    cout<<"\nY="<<y;

   }
 else
 {
 if (((c1*b2-b1*c2)==0)&&((a1*c2-c1*a2)==0))

    cout<<endl<<"THE SYSTEM HAS INFINITE SET OF DECISIONS!";

 if ((((c1*b2-b1*c2)!=0)&&((a1*c2-c1*a2)==0))||(((c1*b2-b1*c2)==0)&&((a1*c2-c1*a2)!=0))||(((c1*b2-b1*c2)!=0)&&((a1*c2-c1*a2)!=0)))

    cout<<"THE SYSTEM HAS NOT DECISIONS!\n";
 }
 cout<<endl<<endl<<"PRESS ANY KEY FROM BACK TO MAIN MENU!";
 getch();
 goto m1;

 break;
 case 0:
 exit(0);
 }

getch();
}
как мне освободить память ? а то если жму 2 раза 2 он выделяет вхолостую и выводит мусор
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #52 : 06-06-2008 08:58 » 

alliance, А етот код вообще компилируется? Ато меня не очень впечатляют конструкции типа
Код:
str2=new  *[j];
Код:
str2[b]=new [j];
хотя может по стандарту он заменяет такие "пустоты" на int... Но ето надо спросить у знатоков стандарта...
а вот тут
Код:
while(!feof(f1))
{
fscanf(f1,"%d",&ch1);
a12[i1]=ch1;
i1++;
}
программа, по-моему, вообще должна была упасть, причем весьма красиво.
« Последнее редактирование: 06-06-2008 09:03 от Sands » Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #53 : 08-06-2008 17:38 » 

Все компилируется и работает прекрасно )
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #54 : 08-06-2008 17:39 » 

а как тогда написать выделение памяти для двумерного массива и ее освобождение с помощью new\delete ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #55 : 08-06-2008 17:43 » 

а как тогда написать выделение памяти для двумерного массива и ее освобождение с помощью new\delete ?

Код:
//выделение
int* array=new int[Xdim*Ydim];

......

//удаление
if(array)
{
   delete [] array;
   array=0;
}
Записан

alliance
Постоялец

ru
Offline Offline

« Ответ #56 : 08-06-2008 20:01 » 

вопрос тогда как через указатель обращаться к двумерному массиву ?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #57 : 09-06-2008 01:27 » 

alliance, а может всё-таки уже откроешь книжку и почитаешь теорию? Или хотя бы внмательно сообщения в этой теме. Там есть все ответы на твои вопросы. Тем более, что эта формула приведена на этой странице как минимум два раза, причём один раз в ответе тебе. Будть внимательней.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #58 : 09-06-2008 03:34 » 

alliance, да, кстати, пост №35 , метод get_x_y() )))
Записан

alliance
Постоялец

ru
Offline Offline

« Ответ #59 : 09-06-2008 08:09 » new

автора не подскажете для начинающего ? Подбельский о си пишет, я по Лафорье читал , но там нету такого, Дейтел слишком много непонятной воды.
Записан
Страниц: 1 [2] 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines