Ir ao conteúdo
  • Cadastre-se

Conjunto de valores de x e mostrar os valores de y= f(x) para algumas funções


Mateus Nunes

Posts recomendados

Boa tarde! Estou fazendo um projeto de algoritmos e não sei como proceder. Pede-se o seguinte: ler um conjunto de valores de x e mostrar os valores de y= f(x) em forma de matriz com duas colunas. Acredito que primeiramente, um intervalo de valores de x deve ser estabelecido, pelo usuário, certo? Pois acho que com valores aleatórios seria impraticável, né? Alguém sabe como implementar essa parte em especial?  Estou um pouco perdido.

Obs.: Na parte escrito "indefinido", eu tenho que elaborar uma função criada pelo programador que realize algum tipo de processamento em um conjunto de caracteres, caso alguém tenha algum exemplo ou ideia, eu agradeço!!!!!! 

#include <stdio.h>
#include <locale.h>
#include <math.h>
#include "Minha Biblioteca.h"
main()
{
char option,optionf;
float a,b,c;
int x;

setlocale(LC_ALL,"portuguese");
printf("\t\t\t\tMENU PRINCIPAL");
printf("\n\n1- Valores de y=f(x) para as funções: ");
printf("\n   a- Função Afim;");
printf("\n   b- Função Linear;");
printf("\n   c- Função Constante;");
printf("\n   d- Função Exponencial;");
printf("\n   e- Função Polinomial de Segundo Grau.");
printf("\n2- Indefinido");
printf("\n3- Sair");
printf("\n\nDigite a opção desejada: ");
scanf("%c",&option);
system("cls");

switch(option)
{
case 1: printf("\t\t\t\tMenu - Funções");
        printf("\n\nFunções: ");
        printf("\n   1- Função Afim;");
        printf("\n   2- Função Linear;");
        printf("\n   3- Função Constante;");
        printf("\n   4- Função Exponencial;");
        printf("\n   5- Função Polinomial de Segundo Grau.");
        printf("\n\nDigite a opção desejada: ");
        scanf("%c",&optionf);
        system("cls");
switch(optionf)
{
case 1: a=b=x=0;
        printf("\t\t\t\tFUNÇÃO AFIM");
        printf("\n\nPara a função do tipo y=ax+b, determine os parâmetros:");
        printf("\n\nDigite o valor de a: ");
        scanf("%f",&a);
        printf("\nDigite o valor de b: ");
        scanf("%f",&b);
        printf("\nInforme o número de pontos, da coordenada x: ");
        //????????
}
}
}

 

Link para o comentário
Compartilhar em outros sites

Será que eu entendi?! 

Suponhamos que o usuário entre com x := -3, então teremos um vetor de tamanho 4 para 4 valores de f(x).

O que veremos é:

vetor[ 0 ] = f(0);

vetor[ 1 ] = f(-1);

vetor[ 2 ] = f(-2);

vetor[ 3 ] = f(-3);

Onde  claramente y = f(x); o tamanho do vetor será sempre igual a qualquer valor absoluto de | x | + 1.

Link para o comentário
Compartilhar em outros sites

Na verdade, me disseram agora o seguinte: teremos que fazer uma matriz de variáveis linhas e duas colunas. Porém será necessário preencher todas as linhas primeiro e só a primeira coluna; e a segunda coluna terá de ser feita conforme a primeira utilizando a equação da função escolhida. Portanto, primeiro pergunta-se quantos valores de x, para fazer então a matriz[valores de x][2] e, feito isso, percorrer a matriz variando as linhas e mantendo a coluna fixa em 1 para armazenar os valores. Depois, teremos que percorrer de novo para armazenar os valores de y conforme a equação na coluna 2. Por fim, percorrer novamente para mostrar os dados com printf. 

MAS, eu não estou conseguindo percorrer a matriz, mantendo as colunas fixas para armazenar os valores e nem sei como armazenar os valores de y, posteriormente............

Deu pra entender? Sabe como me ajudar??

Obrigado!!!!!!!!!

Link para o comentário
Compartilhar em outros sites

Perfeitamente @Mateus Nunes

Como acredito que o código fornece aprendizagem mais significativa que o algoritmo segue abaixo uma possível solução para complemento de sua tarefa.

#include <stdio.h>

void func_afim( void );
int main( void )
{
  func_afim( );
    return 0;
}

void func_afim( void )
{
  int in, index = 0;

  printf( "Entre com número de pontos: " );
  scanf( "%d",&in );


//[?] para saber mais, pesquise por VLA!
  float mat[ in ][ 2 ];


//[?] Aqui entra com os valores reais para n-pontos fase das abcissas...
  while( index < in )
  {
    printf( "Entre com valor real para x%d: ", index + 1 );

    scanf( "%f", mat[ index++ ] );//[!] As colunas estão fixas, apenas a ...
    // linha está se movendo, conforme controle da variável index = index + 1 ...
    // e a função scanf estará acessando o local da primeira coluna na memória.
  }

  index = 0;
//[?] Aqui entra com os valores reais para n-pontos fase das coordenadas...
  while( index < in )
  {
    float a = 0, b = 0;
    if( a == 0 && b == 0 )
    {
      printf( "Para f(x)= ax + b entre com valores de a E b(neste formato): " );
      scanf( "%f E %f", &a,&b );
    }
    mat[ index ][1] = a * mat[ index ][0] + b;//[!] As colunas estão fixas, apenas a ...
    // linha está se movendo, conforme controle da variável index = index + 1 ...
    // e a função operação estará atribuindo no segunda coluna na memória.

    index++;
  }

  index = 0;
  printf( "****Resultado\n" );
  while( index < in )
  {
    printf("#%d Ponto( %.1f,%.1f )\n",1+index, mat[ index ][0],mat[ index ][1] );
    index++;
  }
  printf( "Done!\n" );
  return;
}

 

Link para o comentário
Compartilhar em outros sites

Cara, muito obrigado pela ajuda!!!!

Confesso que não entendi perfeitamente o que você fez, porém deu pra me basear no código que segue abaixo.

Mas ainda tenho dois questionamentos:

1°- porque não consigo adicionar essas novas linhas de código, ao código principal? (aquele postado primeiramente) Recebo a mensagem "switch jumps into escope of identifier with variable modifier type"

2º - Como eu faria essas novas linhas se tornarem uma função, para que fosse mais fácil chamá-la no código principal? Acho que ficaria ainda mais claro construir 3 funções, né?

Uma void para preencher, uma float para calcular e outra void para escrever na tela a matriz.....isso é possível? Essa parte de funções, eu tive apenas uma aula e, portanto, ainda tenho bastante dificuldade!

 

Novamente, muito obrigado pela atenção!!!

#include <stdio.h>
#include <locale.h>
#include <math.h>

main()
{
char option,optionf;
int qtd,i,index=0;
float a,b,c;

setlocale(LC_ALL,"portuguese");

printf("\t\t\t\tFUNÇÃO AFIM");
        printf("\n\nPara a função do tipo y=ax+b, determine os parâmetros:");
        printf("\n\nDigite o valor de a: ");
        scanf("%f",&a);
        printf("\nDigite o valor de b: ");
        scanf("%f",&b);
        printf("\nInforme o número de pontos, da coordenada x: ");
        scanf("%d",&qtd);
        float mat[qtd][2];
        for(index=0;index<=qtd-1;index++)/// CHAMAR UMA FUNÇÃO QUE REALIZE TUDO QUE ESTÁ ABAIXO DISSO!
        {
        printf("Entre com valor real para x%d: ",index+1);
        scanf("%f",mat[index]);
        }
        for(index=0;index<=qtd-1;index++)
        {
        mat[index][1]=a*mat[index][0]+b;
        }
        for(index=0;index<=qtd-1;index++)
        {
        printf("%dº Ponto(%.2f,%.2f)\n",1+index,mat[index][0],mat[index][1]);
        }
}

 

Link para o comentário
Compartilhar em outros sites

1- A unica relação que existe entre nossos códigos e de causa, quero dizer, não há como inseri-lo no primeiro, sem erros. Teria que entender o que acontece nele e escrever a lógica das tarefas, resultado seria este: O erro hipoteticamente, deve ser por causa de uma variável ter sido declarada na clausa case, isso não pode, observe a forma correta abaixo.

#include <stdio.h>
#include <locale.h>
#include <math.h>
//#include "Minha Biblioteca.h" //[?] é sua!
main()
{
    char option,optionf;
    float a,b,c;
    int x;

    setlocale(LC_ALL,"portuguese");
    printf("\t\t\t\tMENU PRINCIPAL");
    printf("\n\n1- Valores de y=f(x) para as funções: ");
    printf("\n   a- Função Afim;");
    printf("\n   b- Função Linear;");
    printf("\n   c- Função Constante;");
    printf("\n   d- Função Exponencial;");
    printf("\n   e- Função Polinomial de Segundo Grau.");
    printf("\n2- Indefinido");
    printf("\n3- Sair");
    printf("\n\nDigite a opção desejada: ");
    scanf("%c",&option);
    system("cls");

    while(getchar() != '\n')continue; //[?] limpa o stream da telca ENTER;

    switch(option)
        {
        case '1':
            printf("\t\t\t\tMenu - Funções");
            printf("\n\nFunções: ");
            printf("\n   1- Função Afim;");
            printf("\n   2- Função Linear;");
            printf("\n   3- Função Constante;");
            printf("\n   4- Função Exponencial;");
            printf("\n   5- Função Polinomial de Segundo Grau.");
            printf("\n\nDigite a opção desejada: ");
            scanf("%c",&optionf);
            system("cls");
            switch(optionf)
                {
                case '1':
                    { //[!] O case contém o bloco e não as declarações.
                    int index;//Index aqui.

                    a=b=x=0;
                    printf("\t\t\t\tFUNÇÃO AFIM");
                    printf("\n\nPara a função do tipo y=ax+b, determine os parâmetros:");
                    printf("\n\nDigite o valor de a: ");
                    scanf("%f",&a);
                    printf("\nDigite o valor de b: ");
                    scanf("%f",&b);
                    printf("\nInforme o número de pontos, da coordenada x: ");
                    scanf( "%d", &x );
                    float mat[x][2];

                    for( index = 0; index < x; index++ )
                    {
                      printf( "Entre com valor real para X%d: ", index + 1 );
                      scanf( "%f",mat[ index ] );
                      mat[ index ][1] = a * mat[ index ][0] + b;
                    }

                  printf( "***Exibir Resultado\n" );
                  for( index = 0; index < x; index++ )
                    printf( "%dº ponto(%.1f;%.1f)\n", index + 1, mat[ index ][0], mat[ index ][1] );
                    }
                }
        }
}

 

2- Sim faz com parâmetros, na função main:: crie o vetor, passe-e por argumento de parâmetro de função a cabeçario da função afim seria: afim(float[][2]), outra função chamada show(float[][2],int a, int b, int x ) pode calcular as imagens de (y) e exibir os pontos. É isso!

 

Fica a vontade para questionar :)

 

Link para o comentário
Compartilhar em outros sites

Beleza!!!!! Muito obrigado!!

 

Vou tentar montar as funções aqui e qualquer coisa, retorno!

adicionado 50 minutos depois

Cara, acredito que haja um erro na minha função pow (últimas linhas).

 

Sabe me dizer o que é? Vou enviar só um pedaço do código!

Outra coisa, realmente não estou conseguindo fazer as funções. Um dos quesitos do projeto é usar uma do tipo void e outra do tipo float, double ou int, chamando-as no programa principal, através da biblioteca, apenas pelo nome.

Tu teria como exemplificar como deve ficar para esse caso??

#include <stdio.h>
#include <locale.h>
#include <math.h>
main()
{
char option,optionf;
float a,b;
double c;
int qtd,index;
double a_p;

        setlocale(LC_ALL,"portuguese");
        printf("\t\t\t\tFUNÇÃO POLINOMIAL");
        printf("\n\nPara a função do tipo y=ax^2+bx+c, determine os parâmetros:");
        printf("\n\nDigite o valor de a: ");
        scanf("%lf",&a_p);
        printf("\nDigite o valor de b: ");
        scanf("%f",&b);
        printf("\nDigite o valor de c: ");
        scanf("%f",&c);
        printf("\nInforme o número de pontos, da coordenada x: ");
        scanf("%d",&qtd);
        float mat[qtd][2];
        for(index=0;index<=qtd-1;index++)
        {
        printf("Entre com valor real para x%d: ",index+1);
        scanf("%f",mat[index]);
        }
        for(index=0;index<=qtd-1;index++)
        {
        mat[index][1]=pow(a*mat[index][0],2)+b*mat[index][0]+c;
        }
        for(index=0;index<=qtd-1;index++)
        {
        printf("%dº Ponto(%.2f;%.2lf)\n",1+index,mat[index][0],mat[index][1]);
        }
}

 

adicionado 56 minutos depois

Vou enviar os dois exemplos passados em sala de aula! (No primeiro, por exemplo, se eu crio uma matriz mat[2][2], eu chama a função assim: escreve_matriz(mat,2,2).

 

Acredito que para o caso do projeto seja algo similar......

void escreve_matriz(double mat[10][10],int nl, int nc)
{
int l,c;
printf("\n\nValores armazenados na Matriz:\n\n");
for(l=0;l<=nl-1;l++)
{
for(c=0;c<=nc-1;c++)
{printf("%lf\t",mat[l][c]);}
printf("\n\n");
}
}
////////////////////////////////////////////////////////////////////////////////////////
double calcula_media_matriz(double mat[10][10], int nl, int nc)
{
int l,c;
double soma=0;
printf("\n\nCalculando a média...\n");
for(l=0;l<=nl-1;l++)
{
for(c=0;c<=nc-1;c++)
{soma=soma+mat[l][c];}
}
return (soma/(nl*nc));
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...