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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2009, 21:05   #1
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию Помогите настроить вывод "printf"

Братцы программисты помогите настроить вывод следующим образом: Выводить в три колонки в формате f(x)=y через паузы-нажатия клавиши порциями по N*3 значений (N задает пользователь, сначала снизу вверх заполняется вся колонка, затем также начинается новая)

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> 
#include <math.h> 
#include <dos.h> 
#define C 60
#define M 2

double f(double x)
{
	double y;
	if(x<=-2) y=1-2*(sqrt(1-x));
	else if(-2<x<=4) y=6-exp(x);
	else y=3*sin(2*x);
	return y;
}

void main(void)
{
	unsigned N, c, r;
	double x1, x2, dx, x, y, s;
	clrscr();
	printf("Program tabulates function from x1 to x2, step dx\n");
	printf("Enter x1, x2, dx: \n");
	scanf("%lf%lf%lf", &x1, &x2, &dx);
	printf("Program waits 5 seconds and clears screen every N points. Enter N: ");
	scanf("%u", &N);
	N=N*3;
  if(dx<=0)
	{
		printf("Error. dx must be >0 dx*=-1;");
		exit(1);
	}
	clrscr();
	x=x1;
	c=1;r=N;s=0;
	do
	{
	y=f(x);
	s+=y*dx;
	gotoxy(c, r);
	printf ("f(%5.2lf)=%5.2lf", x, y);

	if(r<1)
	{
		delay(2000);
		c++;
    r++;
	}
		else
	{
		r=r-1;
	}
	x+=dx;
	}while(x<=x2);
	getch();
}
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 08.10.2009, 22:24   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, наверное, как-то так можно
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <dos.h>

#define C 60
#define M 2

double f(double x)
{
    double y;
    if(x<=-2) y=1-2*(sqrt(1-x));
    else if(-2<x<=4) y=6-exp(x);
    else y=3*sin(2*x);
    return y;
}

void main(void)
{
    unsigned N, c, r, step;
    double x1, x2, dx, x, y, s;
    clrscr();
    printf("Program tabulates function from x1 to x2, step dx\n");
    printf("Enter x1, x2, dx: \n");
    scanf("%lf%lf%lf", &x1, &x2, &dx);
    printf("Program waits 5 seconds and clears screen every N points. Enter N:
    scanf("%u", &N);
    N=N*3;

    if(dx<=0) {
        printf("Error. dx must be >0 dx*=-1;");
        exit(1);
    }
    clrscr();

    x=x1;
    c=1;
    r=1;
    s=0;
    do
    {
        step = 0;

        while(step < N ) {
            y = f(x);
            s += y * dx;
            gotoxy(c, r);
            printf ("f(%5.2lf) = %5.2lf", x, y);
            r++;
            step++;
            x += dx;
        }

        c += 26;
        if(c <= 80-26)
            r -= N;
        else {
            r++;
            c = 1;
        }
        delay(5000);

    } while(x <= x2);

    getch();
}
netrino вне форума Ответить с цитированием
Старый 08.10.2009, 23:12   #3
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Огромное спасибо, только вот еще необходимо, что бы строки начинались снизу вверх, вот это для меня сложность…
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 08.10.2009, 23:27   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А, не заметил)
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <dos.h>

#define C 60
#define M 2

double f(double x)
{
    double y;
    if(x<=-2) y=1-2*(sqrt(1-x));
    else if(-2<x<=4) y=6-exp(x);
    else y=3*sin(2*x);
    return y;
}

void main(void)
{
    unsigned N, c, r, step;
    double x1, x2, dx, x, y, s;
    clrscr();
    printf("Program tabulates function from x1 to x2, step dx\n");
    printf("Enter x1, x2, dx: \n");
    scanf("%lf%lf%lf", &x1, &x2, &dx);
    printf("Program waits 5 seconds and clears screen every N points. Enter N: ");
    scanf("%u", &N);
    N=N*3;

    if(dx<=0) {
        printf("Error. dx must be >0 dx*=-1;");
        exit(1);
    }
    clrscr();

    x=x1;
    c=1;
    r=0;
    s=0;
    do
    {
        step = N;

        while(step > 0 ) {
            y = f(x);
            s += y * dx;
            gotoxy(c, r + step);
            printf ("f(%5.2lf) = %5.2lf", x, y);
            step--;
            x += dx;
        }

        c += 26;
        if(c > 80-26) {
            r = r + N + 1;
            c = 1;
        }
        delay(1000);

    } while(x <= x2);

    getch();
}
netrino вне форума Ответить с цитированием
Старый 08.10.2009, 23:54   #5
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

netrino спасибо! здорово, а можно еще не много улучшить? А имеемо clrscr () применять по мере заполнения трех столбцов…
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 09.10.2009, 00:02   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А... так новые надо вместо старых ставить?))
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <dos.h>

#define C 60
#define M 2

double f(double x)
{
    double y;
    if(x<=-2) y=1-2*(sqrt(1-x));
    else if(-2<x<=4) y=6-exp(x);
    else y=3*sin(2*x);
    return y;
}

void main(void)
{
    unsigned N, c, r, step;
    double x1, x2, dx, x, y, s;
    clrscr();
    printf("Program tabulates function from x1 to x2, step dx\n");
    printf("Enter x1, x2, dx: \n");
    scanf("%lf%lf%lf", &x1, &x2, &dx);
    printf("Program waits 5 seconds and clears screen every N points. Enter N: ");
    scanf("%u", &N);
    N=N*3;

    if(dx<=0) {
        printf("Error. dx must be >0 dx*=-1;");
        exit(1);
    }
    clrscr();

    x=x1;
    c=1;
    r=0;
    s=0;
    do
    {
        step = N;

        while(step > 0 ) {
            y = f(x);
            s += y * dx;
            gotoxy(c, r + step);
            printf ("f(%5.2lf) = %5.2lf", x, y);
            step--;
            x += dx;
        }

        c += 26;
        if(c > 80-26) {
            delay(3000);
            clrscr();
            r = 0;
            c = 1;
        }

    } while(x <= x2);

    getch();
}
Так? )

Последний раз редактировалось netrino; 09.10.2009 в 00:14. Причина: исправил
netrino вне форума Ответить с цитированием
Старый 10.10.2009, 20:57   #7
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Да, спасибо, осталось только последняя проблема. Например: при задание х1=1, х2=10, dx=1 и N=2. Полу чается следующие первый столбец ответы от 1 до 6 (правильно), а второй от 7до 12, что по условию не верно, так как отрезок задан до 10, то есть ответы должны быть от 7 до 10 во втором столбце.
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Старый 10.10.2009, 21:06   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А, да, точно )
Замените
Код:
while(step > 0 )
на
Код:
while( (step > 0) && (x <= x2) )
И кстати, у Вас ошибка в коде:
Код:

double f(double x)
{
    double y;
    if(x<=-2) y=1-2*(sqrt(1-x));
    else if(-2<x<=4) y=6-exp(x); // Так нельзя, будут неверные результаты. Замените на else if(x <= 4). Предыдущий if гарантирует,
                                             // что х > -2
    else y=3*sin(2*x);
    return y;
}

Последний раз редактировалось netrino; 10.10.2009 в 21:12.
netrino вне форума Ответить с цитированием
Старый 10.10.2009, 21:56   #9
sp_Иришка
Пользователь
 
Аватар для sp_Иришка
 
Регистрация: 08.10.2009
Сообщений: 15
По умолчанию

Ультра мега супер ваууу. Netrino ОГРОМНОЕ спасибо, теперь буду знать к кому обращаться за помощью.
Думать - самая трудная работа; вот, вероятно, почему этим занимаются столь немногие.
sp_Иришка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"а" и "б" не хотят посчитаться, помогите мне их посчитать) Лука Microsoft Office Excel 5 10.12.2010 02:43
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Помогите пожайлуста найти, кто человек "вконтакте", зная его "мэйл" Аксюнька1990 Помощь студентам 1 12.06.2009 06:16
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
как "закрепить" вывод тултипа? il-62 HTML и CSS 0 06.11.2008 14:19