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

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

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

Показать сообщение отдельно
Monmorensi
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 21
05.06.2009, 06:35  [ТС]     немогу найти, почему висьнет программа...
я исправила кое-что,теперь осталось :1.-при выводе результат рекурсии, программа ругается на А1, В1, D, если нажимать "продолжить", то она все считает =(. 2.-при расчете матрицы программа просит еще 3 раза вводить массивы А и В, и считает по 3 введенному, а не по тому где я ввожу в меня ввода данных =(
Остальное работает =)
Код
[CPP]#include "stdafx.h" // подключается файл stdafx.h
#include <stdio.h> //Функции ввода - вывода для стандартных потоков
#include <conio.h> //Функции для работы с терминалом в текстовом режиме
#include <ctype.h> //Функции и макросы проверки и преобразования символов
#include <stdlib.h> //Функция для работы с динамической памятью
#include <string.h> //Функция работы со строками
#include <math.h> //функция для работы с математическими функциями
#include <malloc.h>
#include "locale.h" //Функция для подключения русского языка

void zad_rec(); // задание рекурсии
void zad_matrica(); //задание матрица
void inform_rec(); //онформация рекурсия
void inform_matrica(); //информация матрица
int input(int,char,char); //ввод размерности
double input_massiv1(int,double **); //ввод массива а
double input_massiv2(int,double **); //ввод массива в
void output(int,char, char, char,double , double**, double **, double **); //вывод
double recursia(int); //рекурсия
double matrix(int,double **, double**, double **, double **,double **); //матрица
int zashita_rec(); // Функция защиты при вводе N в рекурсии
int zashita_matrica(); // Функция защиты при вводе N в матрице
int zashita_elem(); // Функция защиты при вводе элементов в матрице
void main()
{
setlocale(LC_ALL,"Russian");

char c='\0';
char typeTask='\0', //тип задания
typeInput='\0', //способ ввода данных
typeOutput='\0'; //способ вывода данных
int N=20;

double itog=0; //рекурсия
double **A,**A1;
double **B, **B1;
double **D;
int i, j;
int k=2;


do
{
//textbackground(BLACK);
system("cls");
c=0;
printf("1. Выбор задания\n");
printf("2. Ввод данных\n");
printf("3. Расчет\n");
printf("4. Вывод результата\n");
printf("5. Информация\n");
printf("6. Текст задания\n");
printf("7. Выход\n");
printf("Выберите пункт меню:\n");
while ((c = _getch()) < '1'|| c > '7')
printf("\rВыберите пункт меню: \n");
switch(c)
{
// ВЫБОР ЗАДАНИЯ
case '1':
system("cls");
c = '\0';
printf("1. Матрицы\n");
printf("2. Рекурсия\n");
printf("Выберите тип задания >>> \n");
while ((c = _getch()) < '1' || c > '2')
printf("\rВыберите тип задания >>> \n");
typeTask = c; // Флаговая переменная определяющая тип задания
break;

// ВВОД ДАННЫХ
case '2':
system("cls");
c = '\0';
switch(typeTask)
{
case '1':
system("cls");
if(typeTask == '2' || typeTask == '1')
{
printf("1. С клавиатуры\n");
printf("2. Из файла\n");
printf("Выберите способ ввода данных >>> \n");
while ((c = _getch()) < '1' || c > '2')
printf("\rВыберите способ ввода данных >>>\n ");
typeInput = c; /* Флаговая переменная определяющая способ ввода данных */
N=input(N,typeInput,typeTask);

{
A=(double**)malloc(N*sizeof(double*));
B=(double**)malloc(N*sizeof(double*));
A1=(double**)malloc(N*sizeof(double*));
B1=(double**)malloc(N*sizeof(double*));
D=(double**)malloc(N*sizeof(double*));
for (i=0; i<N; i++)

{
A[i]=(double*)realloc(0,N*sizeof(double));
B[i]=(double*)realloc(0,N*sizeof(double));
A1[i]=(double*)realloc(0,N*sizeof(double));
B1[i]=(double*)realloc(0,N*sizeof(double));
D[i]=(double*)realloc(0,N*sizeof(double));
}

**A=input_massiv1(N , A);
**B=input_massiv2(N , B);
}
}
break;
case '2':
system("cls");
if(typeTask == '2' || typeTask == '1')
{
printf("1. С клавиатуры\n");
printf("2. Из файла\n");
printf("Выберите способ ввода данных >>> \n");
while ((c = _getch()) < '1' || c > '2')
printf("\rВыберите способ ввода данных >>>\n ");
typeInput = c; /* Флаговая переменная определяющая способ ввода данных */
N=input(N,typeInput,typeTask);
}
break;
default:
printf("Ошибка: задание не выбрано.");
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
break;
// РАСЧЁТ
case '3':
system("cls");
c = '\0';
switch(typeTask)
{
case '1':
system("cls");
if(typeInput=='1'||typeInput=='2')
{
**A1=matrix(N, A, B, A1, B1, D);
**B1=matrix(N, A, B, A1, B1, D);
**D=matrix(N, A, B, A1, B1, D);
printf("Расчет произведен.");

printf("\nНажмите любую клавишу для продолжения...\n");

_getch();
}
else
{
printf("Ошибка: данные не введены.");
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
break;
case '2':
system("cls");
if(typeInput=='1'||typeInput=='2')
{
itog=recursia(N);
printf("Расчет произведен.");
printf("\nНажмите любую клавишу для продолжения...\n");

_getch();
}
else
{
printf("Ошибка: данные не введены.");
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
break;

default:
printf("Ошибка: задание не выбрано.");
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
break;


/* ВЫВОД РЕЗУЛЬТАТА */
case '4':
system("cls");
if(itog==NULL && k==NULL)
{
printf("Ошибка: расчет не произведен.");
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
else
{
c = '\0';

printf("1. На экран\n");
printf("2. В файл\n");
printf("Выберите способ вывода результата >>> ");
while ((c = _getch()) < '1' || c > '2')
printf("\rВыберите способ вывода результата >>> ");
typeOutput = c; // Флаговая переменная определяющая способ вывода данных
output(N, typeInput, typeTask, typeOutput, itog , A1, B1, D);

}
break;
// ИНФОРМАЦИЯ
case '5':
system("cls");
{
c = '\0';
switch(typeTask)
{
case '1':
system("cls");
inform_matrica();
break;
case '2':
system("cls");
inform_rec();
break;
default:
printf("Задание не выбрано");
}
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
break;
}


/* ТЕКСТ ЗАДАНИЯ */
case '6':
system("cls");
c = '\0';
switch(typeTask)
{
case '1':
system("cls");
zad_matrica();
break;
case '2':
system("cls");
zad_rec();
break;
default:
printf("Задание не выбрано");
}
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
break;
/* ВЫХОД */
case '7':
system("cls");
printf("Выйти?\r\n");
printf("1. Да\n");
printf("2. Нет\n");
printf(">>>\n");
while ((c = _getch()) != '1' && c != '2')
printf("\r>>> \n");
if (c == '1')
{
c = '7';
}
else
{
c = '\0';
}
break;
}

}
while(c!='7');
}

void inform_matrica()
{
printf("\n\t\tИнформация о задании № 1:\n");
printf(" Задание по матрицам № 717а.\n");
printf(" Версия 1.2\n");
printf(" 2009 год\n");
printf(" Разработчик : Скопина Кристина,\n");
printf(" студентка ВятГУ гр. ПС-11\n");
}
void inform_rec()
{
printf("\n\t\tИнформация о задании № 2:\n");
printf(" Задание по рекурсии № 214.\n");
printf(" Версия 1.2\n");
printf(" 2009 год\n");
printf(" Разработчик : Скопина Кристина,\n");
printf(" студентка ВятГУ гр. ПС-11\n");
}
void zad_matrica()
{
printf("\n\t---------------------------------------------------------------------");
printf("\n\t Задание(матрица): ");
printf("\n\t---------------------------------------------------------------------");
printf("\n\t \n");
printf("\t Две треугольные матрицы А и В порядка n заданны в виде \n");
printf("\t последовотельности (n+1)n\2 чисел: сначала идет n элементов \n");
printf("\t первой строки,затем n-1 элементов второй строки, начиная со второго \n");
printf("\t элемента, и т.д. (из последней n строки берется только n элемент).\n");
printf("\t Получить в аналогичном виде: \n");
printf("\t матрицу А*В. \n");
printf("\t \n");
printf("\n\t---------------------------------------------------------------------");
}
void zad_rec()
{
printf("\n\t---------------------------------------------------------------------");
printf("\n\t Задание(рекурсия): ");
printf("\n\t---------------------------------------------------------------------");
printf("\n\t ");
printf("\n\t Пусть a0=Cos(1)*Cos(1), a1=-Sin(1)*sin(1), ");
printf("\n\t ak=2a(k-1)-a(k-2), k=2,3.... ");
printf("\n\t найти сумму квадратов(от 1 до N) ! ");
printf("\n\t ");
printf("\n\t---------------------------------------------------------------------");
}

// ФУНКЦИЯ ДЛЯ ВВОДА N

int input(int N ,char typeInput , char typeTask)
{
FILE *W;
char file[256];
int const maxNat=10; //ограничение на размерность матрицы
int const maxNatt=80; //ограничение на рекурсию


if(typeTask == '2') //ввод данных для рекурсии
{
if(typeInput == '1') //с клавиатуры
{
system("cls");
do
{
printf("\n\n\tВведите число N(1 ... %d) = ", maxNatt);
N=zashita_rec();
if (N>maxNatt)
{
printf("\n Вы ввели неправильное число.");
printf("\n Нажмите любую клавишу.");
_getch();
}
}
while (N>maxNatt);

}
else //из файла
{
do
{
printf("\nУкажите путь к файлу:");
scanf("%s",file);
W = fopen(file,"r");
}
while(W==NULL);
fscanf(W,"%d %f %f",N);
fclose(W);
}
}

else //ввод данных для матрицы
{
if(typeInput == '1') //с клавиатуры
{
system("cls");
do
{
printf("\t Введите размерность массива ( 1 ... %d ) : ",maxNat);
N=zashita_matrica();
if (N>maxNat)
{
printf(" Вы ввели неправильное число.");
printf("\n Нажмите любую клавишу.\n");
_getch();
}
}
while (N>maxNat);
}

else //из файла
{
do
{
printf("\nУкажите путь к файлу:");
scanf("%s",file);
W = fopen(file,"r");
}
while(W==NULL);
fscanf(W,"%d",N);
fclose(W);
}
}
return N;
}
/* ФУНКЦИЯ ДЛЯ ВВОДА ЭЛЕМЕНТОВ МАССИВА */

double input_massiv1(int M ,double **A)
{
int i,j;
printf(" Заполните массив A:\n");

for ( i=0; i<M; i++)
for ( j=0; j<(M-i); j++)
{
printf ("A[%d][%d] = ",i,j);
A[i][j]=zashita_elem();
}
return **A;
}
double input_massiv2(int M ,double **B)
{
int i,j;
printf(" Заполните массив B:\n");

for ( i=0; i<M; i++)
for ( j=0; j<(M-i); j++)
{
printf ("B[%d][%d] = ",i,j);
B[i][j]=zashita_elem();
}
return **B;
}
/* ФУНКЦИЯ ДЛЯ ВЫВОДА ДАННЫХ */

void output(int N,char typeInput, char typeTask, char typeOutput,double itog, double **A1, double **B1, double **C)
{
int i, j;
FILE *W;
char file[256];

if(typeTask == '2') //вывод для рекурсии
{
if(typeOutput == '1') //на экран
{
printf("\n\tПри N = %d результат равен : %.15lf",N,itog);
printf("\nНажмите любую клавишу для продолжения...\n");
_getch();
}
else //в файл
{
printf("\nУкажите путь к файлу, в который хотите сохранить результат: ");
scanf("%s",&file);
W = fopen(file,"a++");
fprintf(W,"\n\tПри N = %d результат равен : %.15lf",N,itog);
fclose(W);
printf("Результат сохранен");
printf("\nНажмите любую клавишу для продолжения...");
_getch();
}
}

if(typeTask == '1') //вывод для матрицы
{
if(typeOutput == '1') //на экран
{
printf("Введен массив A, размерности %d",N);
printf("\n");
for (i=0;i<N;i++)
{
for (j=0;j<(N-i);j++)
{

printf("%g ",A1[i][j]);


}
printf("\n");
}

printf("Введен массив B, размерности %d",N);
printf("\n");
for (i=0;i<N;i++)
{
for (j=0;j<(N-i);j++)
{

printf("%g ",B1[i][j]);
}
printf("\n");}

printf(" Решение:");
printf("Массив А*В\n");
for (i=0;i<N;i++)
{
for (j=0;j<(N-i);j++)
{
printf("%g ",C[i][j]);
}
printf("\n");}

printf("\nНажмите любую клавишу для продолжения...");
_getch();

}
else //в файл
{
printf("\nУкажите путь к файлу, в который хотите сохранить результат: ");
scanf("
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru