Ir ao conteúdo
  • Cadastre-se

lunalovegood

Membro Pleno
  • Posts

    33
  • Cadastrado em

  • Última visita

posts postados por lunalovegood

  1. Consegui "resolver" dessa maneira, mas dessa forma o método __str__ fica quase inútil, pois não imprime mais os resultados da soma e da multiplicação. Continuo sem entender a dúvida anterior.

     

    class Complexo:
        def __init__(self, a, b):
            self.real = a
            self.imag = b
            print(self)
            
        def soma(self, a, b, c, d):
            print ("Soma = %2.f + %2.fi"%(a+c, b+d))
    
        def mult(self, a, b, c, d):
            print ("Multiplicação = %2.f + %2.fi"%(a*c - b*d, a*d + b*c))
    
        def __str__(self):
            s = "%2.f + %2.fi"%(self.real, self.imag)
            return s
    
    print ("Complexo 1 = ", end="")
    c1 = Complexo(2, 3)
    print ("Complexo 2 = ", end="")
    c2 = Complexo(4, 5)
    c1.soma(c1.real, c1.imag, c2.real, c2.imag)
    c1.mult(c1.real, c1.imag, c2.real, c2.imag)

     

  2. Boa tarde, fiz esse código que opera números complexos usando Python, estou começando a usar POO e surgiu uma dúvida: até a parte da soma ele calcula e imprime tudo corretamente, mas quando chega na parte da multiplicação os valores de c1.real e c1.imag estão mudados. Ao invés de continuarem com os valores 2 e 3, eles passam a ser o resultado calculado na soma, 6 e 8, isso faz com que a multiplicação dê -16 + 62i ao invés de -7 + 22i. Colocar (c1.real, c1.imag) = (2, 3) antes de calcular a multiplicação foi a solução que encontrei, mas não entendo porque os valores dessas duas variáveis foram trocados pelos de soma. Como consertar isso sem ser pela gambiarra que fiz? Obrigada.

    class Complexo:
        def __init__(self, a, b):
            self.real = a
            self.imag = b
            print(self)
            
        def soma(self, a, b, c, d):
            self.real = a+c
            self.imag = b+d
            return (self)
    
        def mult(self, a, b, c, d):
            self.real = ((a*c) - (b*d))
            self.imag = ((a*d) + (b*c))
            return (self)
    
        def __str__(self):
            s = "%2.f + %2.fi"%(self.real, self.imag)
            return s
    
    print ("Complexo 1 = ", end="")
    c1 = Complexo(2, 3)
    print ("Complexo 2 = ", end="")
    c2 = Complexo(4, 5)
    print ("Soma =", c1.soma(c1.real, c1.imag, c2.real, c2.imag))
    #(c1.real, c1.imag) = (2, 3)
    print ("Multiplicação =", c1.mult(c1.real, c1.imag, c2.real, c2.imag))

     

  3. Bom dia, estou começando a aprender agora sobre programação em C++ e está sendo bem confuso :(

    A proposta é: 

    Projetar um TAD para um círculo, ele é definido por meio do raio e as operações são: construtor de um objeto círculo, função que calcula sua área e seu perímetro.
     
    #include<iostream>#define PI 3.1415using namespace std;//classe circulo formada pelas variáveis private e public, e as funçõesclass circulo{      //variáveis      private:              float raio;      public:             circulo (float r=0); //construtor - se o usuário não digitar o valor do raio posteriormente, continuará sendo 0      //escopo de funções      float area();      float perimetro();      float getraio();};//construtor (aloca memória)circulo::circulo(float r) //coloca sempre a classe antes{                       raio=r;}//cálculo da áreafloat circulo::area() //tipo classe::função{      float a;      a=PI*raio*raio;      return a;}//cálculo do perímetrofloat circulo::perimetro(){      float p;      p=2*PI*raio;      return p;}//pegar o raio do círculofloat circulo::getraio(){      cout<<"Digite o raio do circulo: ";      cin>>raio;      return raio;}//principalint main(){    circulo c1;    cout<<"Raio do circulo: "<<getraio()<<endl;    cout<<"Area do circulo: "<<area()<<endl;    cout<<"Perimetro do circulo: "<<perimetro()<<endl;    system("pause");    return 0;}      

    O Dev C++ aponta erro na função main, dizendo que as funções getraio() area() e perimetro() não foram declaradas, como não foram declaradas sendo que estão dentro da classe circulo e também já foram definidas lá em cima com suas ações correspondentes?

    Agradeço.

     

  4. Boa tarde, o exercício diz: Defina um registro para armazenar os dados (nome, sobrenome, RG, salário) de um empregado em uma empresa. 

    Use um ponteiro para acessar cada atributo. Apresente os dados armazenados.
    Estou com dificuldade em criar um ponteiro para a struct, o código abaixo está dando falha de segmentação, imagino que só pode estar dando isso porque não estou sabendo definir o ponteiro corretamente.
    Já tentei também colocar o 
    struct dados *p;

    dentro da própria struct dados, mas o erro continua o mesmo e eu não sei como consertar, preciso de ajuda.

    Obrigada.

     

     
    #include<stdio.h>#include<stdlib.h>int main(){       struct dados    {           char nome[20], sobrenome[40];           int rg;           float salario;               };        struct dados *p;        printf ("Digite o primeiro nome do funcionario: "); scanf("%s", &p->nome);    printf ("\nDigite o ultimo nome do funcionario: "); scanf("%s", &p->sobrenome);    printf ("\nDigite o RG do funcionario: "); scanf("%d", &p->rg);    printf ("\nDigite o salario do funcionario: "); scanf("%f", &p->salario);        printf ("\n\n\nApresentacao dos dados:");    printf ("\nNome do funcionario: %s %s", p->nome, p->sobrenome);    printf ("\nRG: %d", p->rg);    printf ("\nSalario: %f", p->salario);        system("pause");    return 0;}
     
  5. /* Implemente a estrutura do algoritmo Shell Sort apresentada em aula, considerando que o arquivo processado tenha 10 elementos. A entrada de dados deve ser realizada com vetor do tipo int, gerado aleatoriamente. */#include<stdio.h>#include<stdlib.h>int shellsort(int v[10], int size) {    int i , j , value, gap = 1;    while(gap < size) {        gap = 3*gap+1;    }    while ( gap > 1) {        gap /= 3;        for(i = gap; i < size; i++) {            value = v[i];            j = i - gap;            while (j >= 0 && value < v[j]) {                v[j + gap] = v[j];                j -= gap;            }            v[j+gap] = value;        }    }        //apresentação do resultado    printf ("\n\nVetores ordenados:");    for (i=0; i<10; i++)         printf ("\nv[%d] = %d", i, v[i]);    printf("\n\n");    return 0;}int main(){    int v[10], i=0, size=10;  //distância (h), com início em 1 - define a distância máxima para ordenação        //gerar 10 números aleatórios que podem ser de 0 até 1000     printf ("Vetores gerados automaticamente:");     srand(time(NULL)); //(time(NULL)) para os numeros serem diferentes cada vez que é executado     for (i=0; i<10; i++)     {         v[i] = rand() % 1000; //atribui os valores aleatoriamente e automaticamente ao vetor         printf("\nv[%d] = %d ", i, v[i]);     }          shellsort(v, size);        system("pause");return 0;}    

    Bom dia, o programa acima compila (estou usando DEV) mas o Shell Sort não está ordenando nada, alguém sabe o por quê?

    Obrigada desde já.

  6.  

    Vamos lá...

    Existem alguns errinhos de linguagem específicos do C.

     

    1) Quando se trabalha com string, necessitamos de um terminador de string (definido como '\0'). Ele é um caracter no final da string.

    Dessa forma, se quisermos uma string com 3 caracteres, precisamos declarar o vetor com 4 posições.

    char vetor[4];vetor[0] = 'a';vetor[1] = 'b';vetor[2] = 'c';vetor[3] = '\0'; printf("vetor: %s", vetor);

    2) Para declarar uma string como "limpa", deve-se colocar o terminador de string em todas as posições. Existem duas maneiras simples de fazer isso.

    - Usando a forma como você fez, porém trocando o espaço pelo terminador (espaço é um caracter legível, por isso que não considera como limpeza)

    - Usando a limpeza de maneira direta:

    char vetor[10] = {'\0'}; // Inicia limpo o vetor

    3) Você está utilizando o sinal de comparação (igualdade) quando vai atribuir o valor do vetor a em b. O sinal de atribuição é apenas um igual ("=").

     

     

    Corrigi seu código para você comparar:

    int main(void){    char a[4] = {'\0'};    char b[4] = {'\0'};    int i = 0;    int j = 0;    int n = 0;     printf ("Digite uma palavra de 3 letras: ");    scanf("%s", a);     for ( i = 2; i >= 0; i-- )        b[i] = a[2-i];     printf ("\n\nPalavra digitada: %s \n", a);    printf ("A palavra digitada anteriormente copiada de tras para frente em b: %s \n\n", ;     system("pause");     return 0;}

    Meu deus, o erro estava na minha cara e eu não enxerguei hahahaha

    Obrigada :D

  7. Vou tentar te explicar, o que eu aprendi foi assim: 

    - quando vamos ler apenas um caractere, usamos %c;

    - quando vamos ler mais de um caractere, usamos %s;

     

    No seu caso, é um caractere só, mas sabemos que quando iniciamos um programa com caracteres, pode ser que a variável que você chamou de "op" esteja com lixo eletrônico armazenado, então o sistema pensa que são mais de um digito (o lixo armazenado e a opção que o usuário digita). Para limpar o buffer e excluir esse lixo, usamos fflush(stdin); uma linha antes que o usuário digite a opção desejada.

     

    Se você deixar assim:

    printf("(a) para adição\n"); printf("(s) para subtração\n"); printf("(d) para divisão\n"); printf("(m) para multiplicação\n"); fflush(stdin);scanf("%c",&op);  

    vai ver que dá certo (repare que usei fflush e %c ao invés de %s), pelo menos aqui no dev deu certo. 

    Espero que tenha ajudado. ;)

    • Curtir 1
  8. Boa tarde, inventei de fazer um programa simples aqui, é digitada uma palavra qualquer de 3 letras (string a), depois a copio de trás para frente numa outra string (string b ) tentei fazer isso usando o comando for, mas não deu certo, então fui atribuindo os caracteres em b manualmente, item por item já que a palavra é curta, mas tem algo errado pois no último print não aparece caractere algum na string b, é como se ela estivesse vazia. O que pode estar errado?

    Agradeço desde já a quem puder ajudar.

    #include<stdio.h>#include<string.h>int main(){    char a[3], b[3];    int i, j, n; //n = numero total de caracteres da string a        //limpar a string a e b    for (i=0; i<3; i++)    {        b[i]=' ';        a[i]=' ';    }        fflush(stdin);        printf ("Digite uma palavra de 3 letras: ");     scanf("%s", &a);            b[0] == a[2];    b[1] == a[1];    b[2] == a[0];                printf ("\n\nPalavra digitada: %s \n", a);    printf ("A palavra digitada anteriormente copiada de tras para frente em b: %s \n\n", ;        system("pause");    return 0;}    
  9. O exercício é: Crie uma função SOMA que recebe duas matrizes A e B e 2 inteiros n e m (0<n, m<= 100). As matrizes tem n linhas por m colunas. Devolve a matriz C que é a soma de A com B.


    #include <stdio.h>

    int soma(int a[n][m], int b[n][m], int c[n][m], int m, int n){
    int i, j;
    for (i=0; i<m; i++)
    for (j=0; j<m; j++)
    c[i][j]=a[i][j]+b[i][j];
    return c[i][j];
    }

    void main(){
    int a[100][100], b[100][100], c[100][100], m, n, i, j;
    printf ("Quantas linhas tem as matrizes? "); scanf("%d", &n);
    printf ("Quantas colunas tem as matrizes? "); scanf("%d", &m);
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    printf ("a[%d][%d]= ", n, m); scanf ("%d", &a[n][m]);
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    printf ("b[%d][%d]= ", n, m); scanf ("%d", &b[n][m]);
    int soma (a[][], b[][], c[][], m);
    printf ("A matriz de soma a+b: ");
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    printf ("c[%d][%d]=%d", i, j, c[i][j]);
    getchar();
    getchar();
    getchar();
    }

    No entanto, o programa não está compilando, no DEV C aparecem os seguintes erros:

    Erros.jpg

    Que não estou conseguindo resolver, já fiz várias mudanças nos parâmetros enviados a função mas nada resolve.

    Se alguém puder ajudar, agradeço.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!