Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 21:26   #1
helavisa
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 10
Сообщение что неправильно?

Вылетает прога, объясните почему

Код:
#include <stdio.h>
#include <malloc.h>
#include <math.h>

void main() {
void vvod();
void obrabotka();
void vyvod();
vvod();

obrabotka();
vyvod();
return 0;
}

void vvod()
{
double **a,*max,*min;
int i,j,n=10,o=10,k,m,v,w;
double **b;
FILE* Op = fopen("in0.txt","r");
a=(double**) calloc(n, sizeof(double*));
printf(" isxodnaya matrica\n");
for(i=0;i<n;i++){
*(a+i)=(double*)calloc(o,sizeof(double));
for(j=0;j<o;j++){
fscanf(Op,"%lf",(*(a+i)+j));
printf("%.1lf ", *(*(a+i)+j));
}
printf("\n");
}
return;
}	

void obrabotka()
{
int v,w;

double *max,*min,**a,**b;
int k,m,i,j;
b=(double**) calloc(w, sizeof(double*));
for(i=0;i<w;i++)
*(b+i)=(double*)calloc(v,sizeof(double));

i=0;
j=0;
printf(" result\n");
do{

//max=&a[0][i];
for (k=0; k<10; k++)
  for (m=i; m<10; m++)
    if(max<(*(a+k)+m)) max=(*(a+k)+m);

for (k=j;k<=j && k<10; k++)
  for (m=0; m<10; m++)
    if(min>(*(a+k)+m)) min=(*(a+k)+m);

*(*(b+i)+j)=(*min+*max)/2;
if(i>=9){
printf("\n");
fprintf("\n");

i=0;
j++;
}  else i++;
} while(j!=10);

return;
}

void vyvod(){
double *max,*min,**a,**b;
int k,m,i,j;
FILE* Ex = fopen("out1.txt","w");

printf("%.1f ", b+i+j);
fprintf(Ex, "%.1f ",b+i+j);
return;
}
helavisa вне форума Ответить с цитированием
Старый 01.06.2009, 21:34   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Задание какое? Что должна делать?
Пример исходного файла приведите.

Юзайте отладчик. Вылетает вот здесь:
Код:
for (k=0; k<10; k++)
  for (m=i; m<10; m++)
    if(max<(*(a+k)+m)) max=(*(a+k)+m);
Кто такие max и min? Это переменные, или массивы (объявлены как указатели).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 21:51   #3
helavisa
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 10
По умолчанию

кароче, задание такое Дана действительная матрица A[ij],i,j=1,.,.,.,n. Получить действительную матрицуB[ij],i,j=1,...,n. Значения элемента B[i][j] определяется как среднее арифметическое минимального из элементов, расположенных выше j-той строки и максимального из элементов, расположенных справа от i-того столбца.


переделываю вот эту прогу
Код:
#include <stdio.h>
#include <malloc.h>
#include <math.h>

void main(void) {
double **a,*max,*min;
int i,j,n=10,o=10,k,m, w;
double **b;
FILE* Op = fopen("in0.txt","r");
FILE* Ex = fopen("out1.txt","w");
a=(double**) calloc(n, sizeof(double*));
printf(" isxodnaya matrica\n");
for(i=0;i<n;i++){
*(a+i)=(double*)calloc(o,sizeof(double));
for(j=0;j<o;j++){
fscanf(Op,"%lf",(*(a+i)+j));
printf("%.1lf ", *(*(a+i)+j));
}
printf("\n");
}

b=(double**) calloc(w, sizeof(double*));
for(i=0;i<w;i++)
*(b+i)=(double*)calloc(v,sizeof(double));

i=0;
j=0;
printf(" result\n");
do{

for (k=0; k<10; k++)
  for (m=i; m<10; m++)
    if(max<(*(a+k)+m)) max=(*(a+k)+m);

for (k=j;k<=j && k<10; k++)
  for (m=0; m<10; m++)
    if(min>(*(a+k)+m)) min=(*(a+k)+m);

*b+i+j=(*min+*max)/2;
printf("%.1f ", b+i+j);
fprintf(Ex, "%.1f ",b+i+j);

if(i>=9){
printf("\n");
fprintf("\n");

i=0;
j++;
}  else i++;
} while(j!=10);


fclose(Op);
fclose(Ex);
return 0;
}
helavisa вне форума Ответить с цитированием
Старый 01.06.2009, 23:04   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.06.2009, 12:41   #5
bee_uk
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 18
По умолчанию

сделала прогу с формой, кнопками, формулами...ввожу значения в Edit (их много), запускаю прогу...а мне выводится сообщение, что значение 0,2 0,3 и тд не являются дробными...что какая-то ошибка конвертации...что это??
bee_uk вне форума Ответить с цитированием
Старый 02.06.2009, 12:48   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

bee_uk, не пишите в чужих темах!
Ошибка из-за того, что разделителем в вещественных числах является точка. Если нужна запятая, то сделайте так:
Код:
DecimalSeparator = ',';
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.06.2009, 13:01   #7
bee_uk
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 18
По умолчанию

я точку и вводила
посмотрите код,плиз))
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include "proba.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3,e1,e2,e3,sr1,sr2,sr3,sr4,sr5;
float nov1,nov2,nov3,itog,m,n,p,y1,y2,y3,y4,y5;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button3Click(TObject *Sender)
{
a1 = StrToFloat(Edit2->Text);
a2 = StrToFloat(Edit12->Text);
a3 = StrToFloat(Edit17->Text);
b1 = StrToFloat(Edit4->Text);
b2 = StrToFloat(Edit11->Text);
b3 = StrToFloat(Edit16->Text);
c1 = StrToFloat(Edit5->Text);
c2 = StrToFloat(Edit10->Text);
c3 = StrToFloat(Edit15->Text);
d1 = StrToFloat(Edit6->Text);
d2 = StrToFloat(Edit9->Text);
d3 = StrToFloat(Edit14->Text);
e1 = StrToFloat(Edit7->Text);
e2 = StrToFloat(Edit8->Text);
e3 = StrToFloat(Edit13->Text);
sr1 =(a1+a2+a3)/3;
sr2 =(b1+b2+b3)/3;
sr3 =(c1+c2+c3)/3;
sr4 =(d1+d2+d3)/3;
sr5 =(e1+e2+e3)/3;
nov1=(a1*sr1+b1*sr2+c1*sr3+d1*sr4+e1*sr5);
nov2=(a2*sr1+b2*sr2+c2*sr3+d2*sr4+e2*sr5);
nov3=(a3*sr1+b3*sr2+c3*sr3+d3*sr4+e3*sr5);
itog=nov1+nov2+nov3;
m=nov1/itog;
n=nov2/itog;
p=nov3/itog;
y1=(m*a1+n*a2+p*a3);
y2=(m*b1+n*b2+p*b3);
y3=(m*c1+n*c2+p*c3);
y4=(m*d1+n*d2+p*d3);
y5=(m*e1+n*e2+p*e3);
Label7->Caption = FloatToStr(y1);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------

Последний раз редактировалось Sazary; 02.06.2009 в 13:09.
bee_uk вне форума Ответить с цитированием
Старый 02.06.2009, 13:17   #8
bee_uk
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 18
По умолчанию

вот такая ошибка вылазит
Project raised exception class EConvertError with message "0.3' is not valid floating point value'. Process stopped. Use step or Run to continue.
bee_uk вне форума Ответить с цитированием
Старый 02.06.2009, 13:18   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

bee_uk, читайте Правила раздела.

После этого создайте свою тему.
Если у вас где-то ошибка, то указывайте строку, где она возникает и полный текст ошибки.
Цитата:
Project raised exception class EConvertError with message "0.3' is not valid floating point value'. Process stopped. Use step or Run to continue.
Тогда наоборот, напишите:
Код:
DecimalSeparator = '.';
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.06.2009, 15:19   #10
helavisa
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 10
Печаль

Цитата:
Сообщение от Sazary Посмотреть сообщение
Собственно, я показал где ошибка. У вас не выделена память под массив a и он не проинициализирован. Вот и получаете ошибку доступа.
а как это правильно сделать?
я делаю вот так, массив вообще не считывается
Код:
void main() {
void vvod(double***);
double **a;
vvod(&a);

return 0;
}

void vvod(double ***a)
{
double *max,*min;
int i,j,n=10,o=10,k,m,v,w;
FILE* Op = fopen("in0.txt","r");
a=(double**) calloc(n, sizeof(double*));
printf(" isxodnaya matrica\n");
for(i=0;i<n;i++){
*(a+i)=(double*)calloc(o,sizeof(double));
for(j=0;j<o;j++){
fscanf(Op,"%lf",a[i][j]);
printf("%.1lf ", a[i][j]);
}
printf("\n");
}
return;
}
helavisa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47
неправильно выдаёт stringgrid chelsi Общие вопросы Delphi 3 30.04.2008 22:42
Неправильно умножаются матрицы!!! metamfetamin Помощь студентам 1 09.12.2007 20:37
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41