Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

немогу найти, почему висьнет программа... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция kbhit http://www.cyberforum.ru/cpp/thread38104.html
Это опять я:) Не работает kbhit Нужно, чтобы во время рисования кривой Гильберта большого порядка пользователь имел возможность остановить рисование Вот исходный код #include<stdio.h>...
C++ Подсчет суммы компонентов классов Люди подскажите плз написал прогу: //--------------------------------------------------------------------------- #include <iostream> #pragma hdrstop using namespace std; ... http://www.cyberforum.ru/cpp/thread37613.html
сравнение двух лиц людей C++
Здравствуйте! подскажите пожалуйста, есть ли в сети готовые библиотеки на Си или С++, которые выдают % схожести одного лица на другое(типа look.com) ? особенно интересно для ембедед. может кто...
C++ Деревья (длина пути ...)
Используя очередь или стэк написать функцию, которая находит в непустом дереве Т длину (число ветвей) пути от корня до ближайшей вершины Е; если Е не входит в Т, за ответ принять -1. Буду очень...
C++ Разработать собственные функции динамического распределения памяти http://www.cyberforum.ru/cpp/thread37034.html
Разработать собственные функции динамического распределения памяти, используя в качестве “кучи” динамический массив, создаваемый обычной функцией распределения памяти (malloc). Разработанная функция...
C++ Задание по структурам и классам Есть вот такой код: #include "stdafx.h" #include <iostream> #include <iomanip> #include <conio.h> #include <string.h> #include <fstream> using namespace std; void Choice(); char buff; подробнее

Показать сообщение отдельно
XuTPbIu_MuHTAu
Эксперт С++
2225 / 740 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
04.06.2009, 12:09
При каком вводе зависвает программа? Нет времени,чтобы изучать всю программу,уж извини.

Добавлено через 17 минут 8 секунд
смутило очень сильно :
в функции matrix :
C++
1
return **A1,**B1,**C
в сочетании с таким кодом :
C++
1
2
3
**A1=matrix(N, A, B, k, A1, B1, C);
**B1=matrix(N, A, B, k, A1, B1, C);
**C=matrix(N, A, B, k, A1, B1, C);
Итак,из matrix вернется ТОЛЬКО ОДНО значение,если быть точным - значение **C. Но это еще куда ни шло,не учитывая,что **C - это одно число типа double. В итоге в каждом вызове matrix будет создано три(если не ошибаюсь,бегло смотрел) матрицы, каждая из которых "там и останется", потому что из функции возвращается какое-то дробное число,а вовсе не указатель на начало матрицы или что-там-еще.
дальше.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double input_massiv1(int N ,double **A)
{
        int i,j;
        printf(" Г‡Г*ïîëГ*ГЁГІГҐ Г¬Г*Г±Г±ГЁГў A:\n");
 
        for ( i=0; i<N; i++)
                for ( j=0; j<N-i; j++)
                {
                        printf ("A[%d][%d] = ",i,j);
                        A[i][j]=zashita_elem();
                }
                return **A;
}
1. Зачем две функции -для ввода каждой матрицы? Можно было сэкономить и сделать одну,а строку,которую показывать - в качестве параметра.Но это ладно. Тут опять неясные return **a, а на том конце вызывающей - **A = input_massiv1. Этот оператор приравняет первый элемент матрицы A самому себе...) зачем?

Зависает определенно из-за рекурсии.Суть рекурсии в том,чтобы свести задачу к более простой,от меньшего числа данных,например.У тебя рекурсия выглядит так :
C++
1
2
3
4
5
int recursia(int N) {
...
...
recursia(N);
}
Покажу правильную рекурсию на примере факториала:
C++
1
2
3
4
5
6
7
8
int factorial(int n) {
if(n==1) return 1;
return n* factorial (n-1);// рекурсия сама получит выражение n*(n-1)*(n-2)*....*2*1.
                      //рекурсия от того же параметра не вызывается и есть условие 
                     //завершения.Заметь,что вызов рекурсивный влияет на возвр. 
                    //значение.У тебя - нет.У тебя просто повторно произойдет то же 
                    //самое.
}
Все,больше у меня времени нет смотреть.Побежал сам. Вечером загляну.

Добавлено через 4 минуты 54 секунды
Ну а это что?
C++
1
2
3
4
for (i=0; i<N; i++)
  for (j=0; j<N; j++) //этот ЦИКЛ запустится N раз                                    
        A1[i]=(double*)realloc(0,N*sizeof(double));//а эта строка в сумме выполнится N*N
B1[i]=(double*)realloc(0,N*sizeof(double)); //а эта ТОЛЬКО ОДИН раз
Добавлено через 17 секунд
:'(

Добавлено через 3 минуты 11 секунд
Вечером приду - помогу посерьезней
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru