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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2012, 02:00   #1
Skull_psyhothik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 18
Вопрос Мозги уже плывут!

Доброго времени суток! В универе задали задание : Создайте структуру с полями a,b,x1,x2,dx типа дабл. Введите с клавиатуры данные значения. Добавьте в структуру указатель, выделите под него память для значений ф-ции ф(икс) на интервале от х1 до х2 с шагом дх и обчислите значения ф-ции. Результат вывести в виде таблицы. Создайте ф-цию, которая нормировала бы массив значений ф(х) в диапазон от 0 до К. Вывидите значения ф(х) в тхт-файл в виде вертикальной зависимости... Для значений ф-ции обчислить параметры S1 и S2(с1-среднее среди значений ф(х) которые больше 0, с2-максимальное значение среди значений ф(х)). Создайте массив действительных чисел для всех расчитаных точек, значения которых есть случайными в диапазоне от Smin до Smax(Смакс - большее среди с1 и с2, Смин - меньшее).Шаг случайности должен быть P от Смакс. Упорядочить массив случ.чисел по убыванию. а=10 б=9 х1=0 х2=3 дх=0.1; К=70 P=0.045.Оптимизировать программу для работы с разными значениями.

Так в процессе у меня возникло несколько проблем:
1)в функции void fcia_table() в этом цыкле - for(n=var11.x1;n<=var11.x2;n=n+var1 1.dx) - когда я ввожу х1=0, х2=3 а шаг =0.1(по условию), то считает только до 2.9, а когда ввожу, например, х1=-5, х2=1 а шаг 0.25, то считает нормально, и так что не вводи... короче что-то не так(
2)в ф-ции void random() - собственно не могу вывести ф-лу для расчёта случ.чис в диапазоне с шагом. Напишите плз а?
3)При сортировке в ф-ции рандом сьедаются сотые значения чисел, как это исправить?
4)как узнать что указатель указывает именно на то что тебе нужно?

Прога писалась в спешке, простите за бока) чтоб запустить нужно нажать 1(ввести) потом 3(чтоб посчитало) а потом можно и остальное)



Помогите плз, а то уже мозги плывут(((
Skull_psyhothik вне форума Ответить с цитированием
Старый 07.09.2012, 02:01   #2
Skull_psyhothik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 18
По умолчанию

вот код:
// lab1.cpp: определяет точку входа для консольного приложения.
//



#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include "malloc.h"
#include <fstream>
#include "time.h"

struct var
{
double a;
double b;
double x1;
double x2;
double dx;
double *f;
} var11;
int m=0; //кол-во элем массива
double fmax=0,fmin=0,min=0,max=0,b=1;

void vvod();
void vivod_struct();
void menu();
void fcia_table();// расчёт значений ф(х) и вывод таблицы
void norm_mas(FILE *file);//нормирование массива и вывод графика в файл
void obnul();
void random();

void main()
{
menu();
}

void vvod()
{
printf("Enter value of a : ");
scanf("%lf",&var11.a);
printf("Enter value of b : ");
scanf("%lf",&var11.b);
printf("Enter value of x1 : ");
scanf("%lf",&var11.x1);
m2:
printf("Enter value of x2 : ");
scanf("%lf",&var11.x2);
if(var11.x2<=var11.x1)
{
printf("Error starting point farther than the end \n\n");
goto m2;
}
m3:
printf("Enter value of dx : ");
scanf("%lf",&var11.dx);
if ((var11.dx>(var11.x2-var11.x1)))
{
printf("Error: move more than a space\n\n");
goto m3;
}
}

void vivod_struct()
{
printf("STRUCT : \n");
printf("\ta : %3.2lf\n",var11.a);
printf("\tb : %3.2lf\n",var11.b);
printf("\tx1 : %3.2lf\n",var11.x1);
printf("\tx2 : %3.2lf\n",var11.x2);
printf("\tdx : %3.2lf\n",var11.dx);
}

void menu()
{
m1:
system("cls");
FILE *file=NULL;
int FLAG=0,FLAG1=0;
printf("\t\t\tMenu:\n\n");
printf("\tPress 1 to enter values\n\n");
printf("\tPress 2 to show values \n\n");
printf("\tPress 3 to show table \n\n");
printf("\tPress 4 according to output to a text file \n\n");
printf("\tPress 5 rand \n\n");
printf("\tPress 6 to to enter the data again \n\n");
printf("\tPress Esc to Exit\n\n");
while(FLAG!=27)
{
FLAG=getch();
switch (FLAG)
{
case 49:
{
system("cls");
vvod();
goto m1;
break;
}
case 50:
{
system("cls");
vivod_struct();
printf("\nPress esc to menu");
while(FLAG1!=27)
{
FLAG1=getch();
switch (FLAG1)
{
case 27:
{
goto m1;
}
}
}
break;
}
case 51:
{
system("cls");
fcia_table();
printf("\nPress esc to menu");
while(FLAG1!=27)
{
FLAG1=getch();
switch (FLAG1)
{
case 27:
{
goto m1;
}
}
}
break;
}
case 52:
{
system("cls");
norm_mas(file);
printf("\nPress esc to menu");
while(FLAG1!=27)
{
FLAG1=getch();
switch (FLAG1)
{
case 27:
{
goto m1;
}
}
}
break;
}
case 53:
{
system("cls");
random();
printf("\nPress esc to menu");
while(FLAG1!=27)
{
FLAG1=getch();
switch (FLAG1)
{
case 27:
{
goto m1;
}
}
}
break;
}
case 54:
{
obnul();
goto m1;
}
}
}
}
Skull_psyhothik вне форума Ответить с цитированием
Старый 07.09.2012, 02:02   #3
Skull_psyhothik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 18
По умолчанию

void fcia_table()
{
int c=0;
if((var11.a!=0)||(var11.b!=0)||(var 11.x1!=0)||(var11.x2!=0)||(var11.dx !=0))
{
double x=0,f=0,n=0,b=0,p=0;
for(n=var11.x1;n<=var11.x2;n=n+var1 1.dx)
{
m=m+1;
}
printf("%d\n",m);
var11.f=(double*)malloc(m*sizeof(do uble));
printf("%c",0xDA);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc2);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n", 0xbf);
printf("%c f(x) %c x %c\n", 0xb3, 0xb3, 0xb3);
printf("%c",0xc3);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc5);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n",0xb4);
for(c=0, x=var11.x1;x<=var11.x2;x=x+var11.dx ,c++)
{
if(x<=1)
{
var11.f[c]=var11.a*x*x-var11.b;
printf("%c%10.2lf%6c%10.2lf%6c\n",0 xb3, var11.f[c], 0xb3, x, 0xb3);
if(x<var11.x2)
{
printf("%c",0xc3);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc5);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n",0xb4);
}
else
{
printf("%c",0xc0);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc1);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n",0xd9);
}
}
else
{
var11.f[c]=var11.a/(x+var11.b);
printf("%c%10.2lf%6c%10.2lf%6c\n",0 xb3, var11.f[c], 0xb3, x, 0xb3);
if(x<var11.x2)
{
printf("%c",0xc3);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc5);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n",0xb4);
}
else
{
printf("%c",0xc0);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c",0xc1);
for(int i=1;i<16;i++)
{
printf("%c", 0xc4);
}
printf("%c\n",0xd9);
}
}
}
}
else
{
printf("The data is not filled\n\n\n");
obnul();
}

}

void norm_mas(FILE *file)
{
if((var11.b!=0)||(var11.x1!=0)||(va r11.x2!=0)||(var11.dx!=0)||(var11.a !=0))
{
double *t,l=0;
int n=0,k=0,A=0;
printf("Valuation range from zero to ((enter a whole number): ");
scanf("%d",&A);
t=(double*)malloc(m*sizeof(double)) ;
for(int i=0;i<m;i++)
{
t[i]=var11.f[i];
}
min=t[0];
for(int i=1;i<m;i++)
{
if(t[i]<min)
{
min=t[i];
}
}
max=t[0];
for(int i=1;i<m;i++)
{
if(t[i]>max)
{
max=t[i];
}
}
if((max<0)||(min<0))
{
l=-min+max;
}
else
{
l=max-min;
}
if(l<A)
{
if(max<=1)
{
for(int y=0; y<m; y++)
{
t[y] = (var11.f[y] - min)*A/l;
}
}
else
{
for(int y=0; y<m; y++)
{
t[y] = (var11.f[y] - min)*l/A;
}
}
}
else
{
for(int y=0; y<m; y++)
{
t[y] = (var11.f[y] - min)*A/l;
}
}
printf("\tMas:\tNormMas:\n");
for(int i=0;i<m;i++)
{
printf("\t%3.2lf\t%3.2lf\n",var11.f[i],t[i]);
}
for(n=0; n<m; n++)
{
{
for(k=0; k<t[n]; k++)
printf(" ");
}
printf("%c\n",0xB0);
}
if ((file=fopen("Var11.txt","w"))==NUL L)
{
printf("Fail unable to open or create");
}
else
{
for(n=0; n<m; n++)
{
{
for(k=0; k<t[n]; k++)
fprintf(file," ");
}
fprintf(file,"%c\n",0xB0);
}
fclose(file);
printf("\n\nSuccessful entry\n");
}
}
else
{
printf("The data is not filled\n\n\n");
}
}

void obnul()
{
if((var11.a==0)||(var11.b==0)||(var 11.x1==0)||(var11.x2==0)||(var11.dx ==0))
{
m=1;
min=0;
max=0;
var11.a=0;
var11.b=0;
var11.x1=0;
var11.x2=0;
var11.dx=0;
}
if((var11.a!=0)||(var11.b!=0)||(var 11.x1!=0)||(var11.x2!=0)||(var11.dx !=0))
{
m=1;
min=0;
max=0;
var11.a=0;
var11.b=0;
var11.x1=0;
var11.x2=0;
var11.dx=0;
for(int i=0;i<m;i++)
{
var11.f[i]=0;
}
}
}

void random()
{
if((var11.b!=0)||(var11.x1!=0)||(va r11.x2!=0)||(var11.dx!=0)||(var11.a !=0))
{
int n=0;
double k=0, s1=0, s2=0, smin=0, smax=0, dx=0, u=0,*s;
for(int i=0;i<m;i++)
{
if(var11.f[i]>=0)
{
k=k+var11.f[i];
n=n+1;
}
}
fmax=var11.f[0];
for(int i=1;i<m;i++)
{
if(var11.f[i]>fmax)
{
fmax=var11.f[i];
}
}
s1=k/n;
s2=fmax;
if(s1<s2)
{
smax=s2;
smin=s1;
}
else
{
smax=s1;
smin=s2;
}
u=0.045;
dx=smax*u;
s=(double*)malloc(m*sizeof(double)) ;
printf("%3.2lf max %3.2lf min %lf dx\n\n",smax,smin,dx);
srand((unsigned)time(NULL));
for(int i=0;i<m;i++)
{
s[i]=rand()*(smax-smin)*dx+smin;
printf("%3.2lf\n",s[i]);
}
for (int i = 0; i<m-1; i++)
{
int tmp = 0;
for (int j=(i+1); j<m; ++j)
if (s[i]<s[j]) {
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
printf("\n\nsort mas\n");
for(int i=0;i<m;i++)
{
printf("%3.2lf\n",s[i]);
}
}
else
{
printf("The data is not filled\n");
}
}
Skull_psyhothik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопки при hover плывут neznayka333 HTML и CSS 5 14.02.2012 07:25
Есть тут Мозги по электронике? Air Свободное общение 18 13.01.2012 00:41
Желание,терпение и мозги Gamestop Свободное общение 18 03.04.2011 08:37