Ir ao conteúdo

Posts recomendados

Postado
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#include <math.h>

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

l livros_somar(l livroA, l livroB){
	float livroC;

	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;

	

	return livroA;

}

l livros_menor(l livro1, l livro2){
	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
		strcpy(livro1.titulo, livro2.titulo);
	}

	if(strlen(livro1.autor) > strlen(livro2.autor)){
		strcpy(livro1.autor, livro2.autor);
	}

	return livro1;

}

int main(void){
	setlocale(LC_ALL,"Portuguese");

	int i;
	float soma_livros;
	char menor_livros[100];

	l livros[2];

	for(i=0;i<2;i++){
		printf("Livro %d\n",i+1);
		printf("Informe o titulo: ");
		fflush(stdin);
		fgets(livros[i].titulo, 100, stdin);

		printf("Informe o autor: ");
		fflush(stdin);
		fgets(livros[i].autor, 100, stdin);

		printf("Informe o registro: ");
		scanf("%f",&livros[i].registro);

		printf("Informe o preco: ");
		scanf("%f",&livros[i].preco);
	}

	soma_livros= livros_somar(livros[0], livros[1]);
	menor_livros= livros_menor(livros[0], livros[1]);

	printf("Dados somados= %f\n",soma_livros);
	printf("Menor= %s\n",menor_livros);

	return 0;

}

Galera, to com um pequeno problema no meu código em C, vou enviar o exercício e o código logo a baixo!

 

2) Crie uma estrutura para armazenar livros de uma biblioteca. A estrutura deve armazenar o título do livro, o autor, o número de registro e o preço. Crie uma função que receba duas estruturas do tipo livro e retorne uma estrutura do tipo livro com os dados somados. Para os tipos não numéricos na estrutura, retorne a palavra de menor tamanho.

 

 

image.thumb.png.cf6b37407f44bfb7fa7e057ed6165f00.png

  • Curtir 1
Postado

@Matheus Eduardo Vieira    esse erro é por que são dados incompatíveis  de tipos diferentes , e essa variável que vai receber o retorno precisa ser do mesmo tipo , struct ,  então seu código poderia ser assim  :

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

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

l livros_somar(l livroA, l livroB){
	float livroC;
	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;
	return livroA;
}

l livros_menor(l livro1, l livro2){
	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
		strcpy(livro1.titulo, livro2.titulo);// menor qtd de carateres
	}

	if(strlen(livro1.autor) > strlen(livro2.autor)){
		strcpy(livro1.autor, livro2.autor);// menor qtd de carateres
	}
	return livro1;
}

int main(){
	setlocale(LC_ALL,"Portuguese");

	int i;
	//float soma_livros;       // Tipos incompatíveis
	l soma_livros;             // compatíveis
	//char menor_livros[100];  // Tipos incompatíveis
	l menor_livros;            // compatíveis

	l livros[2];
    for(i=0;i<2;i++){
        printf("Livro %d\n",i+1);
        printf("Informe o titulo: ");
        fflush(stdin);                                      // limpar o buffer do teclado
        fgets(livros[i].titulo, 100, stdin);                // pega toda a linha e mais o NewLine
        livros[i].titulo[strlen(livros[i].titulo)-1] = '\0';// remover NewLine para não pular linha
        printf("Informe o autor: ");
        fflush(stdin);                                      // limpar o buffer do teclado
        fgets(livros[i].autor, 100, stdin);                 // pega toda a linha e mais o NewLine
        livros[i].autor[strlen(livros[i].autor)-1] = '\0';  // remover NewLine para não pular linha
        printf("Informe o registro: ");
        scanf("%f",&livros[i].registro);

        printf("Informe o preco: ");
        scanf("%f",&livros[i].preco);
    }

    soma_livros  = livros_somar(livros[0], livros[1]);
    menor_livros = livros_menor(livros[0], livros[1]);

    printf("Registro somados -= %.2f\n",soma_livros.registro);
    printf("Preco somados ----= %.2f\n",soma_livros.preco   );
    printf("Menor Titulo -----= %s  \n",menor_livros.titulo );
    printf("Menor Autor ------= %s  \n",menor_livros.autor  );

    return 0;
}

 

Postado


Você escreveu mais e menos do que foi pedido... E está errado.

 

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

 

10 horas atrás, Matheus Eduardo Vieira disse:

Crie uma estrutura para armazenar livros de uma biblioteca. A estrutura deve armazenar o título do livro, o autor, o número de registro e o preço

 

Está ok, até na ordem do enunciado.

 

MAS...

  • porque um número de registro float? Acha que alguém vai digitar o livro com o código -123.23 ou algo assim? Não vai. Não vai sequer operar com esses números. Somar registro não leva a nada, seria como somar CPF. Veja o exemplo da realidade: todo livro publicado já tem um número, como você pode suspeitar, e se chama ISBN. (Claro que ia ter 3 ou 4 letras e uma abreviação de uma expressão em inglês :D ) 
    E esse número é uma sequência de 10 ou 13 posições. Veja direto da Amazon: todos os livros publicados do mundo tem isso

    image.png.1e8765a91f8b2821b35ddffe3cdb6aec.png 

    Em resumo: use um char[] também e na soma retorne o menor, tanto faz. Sem inventar nada. Pegue um livro ou abra um anúncio e simplesmente faça igual :) 
     
  • Porque a estrutura não se chama simplesmente Livro?

 

11 horas atrás, Matheus Eduardo Vieira disse:

Crie uma função que receba duas estruturas do tipo livro e retorne uma estrutura do tipo livro com os dados somados. Para os tipos não numéricos na estrutura, retorne a palavra de menor tamanho

 

E aqui você escreveu duas funções e não fez o previsto. Note que o registro de um livro não é exatamente um número e sim 5 grupos de números e o último é um dígito verificador. Não se soma essas coisas. De todo modo se declarar como int apenas some.

 

l livros_somar(l livroA, l livroB){
	float livroC;

	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;

	

	return livroA;

}
  • Imagino que era para ser essa a função-resposta. Que pretendia fazer com o livroC que está aí parado?
  • Podia fazer o simples e tratar os campos um a um. E receber o endereço de cada estrutura já que não vai mexer nelas e elas são relativamente grandes. Em geral não se passa structs com centenas de bytes assim...
  • l livros_menor(l livro1, l livro2){
    	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
    		strcpy(livro1.titulo, livro2.titulo);// menor qtd de carateres
    	}
    
    	if(strlen(livro1.autor) > strlen(livro2.autor)){
    		strcpy(livro1.autor, livro2.autor);// menor qtd de carateres
    	}
    	return livro1;
    }

    E aqui foi onde você não entendeu o espírito da coisa:

image.png.3e252ce40f061a2a9177c112b59bcddf.png

 

O que você quer na verdade é declarar um novo livro e mostrar o resultado. E nem precisava de um vetor de livros na verdade. Apenas 3 livros.

l livro_resultado = somar_livros( livro1, livro2 );
l livro_resultado = somar_livros( livros[0], livros[1]);

Veja como pode ser mais simples:

 

Exemplo

typedef struct
{
	char titulo[100];
	char autor[100];
	char registro[20];
	float preco;
}	Livro;

typedef struct
{
	char    nome[100];
	int     N; // o total de livros
	Livro*  Acervo; // O vetor de livros
}	Biblioteca;

A biblioteca tem um acervo de N livros e eles estão DENTRO da estrutura, por exemplo. E 

Livro  somar(Livro*, Livro*);
int    mostra(Livro*);

O programa só trata Livro então somar e mostra faz o esperado. Não precisa ficar repetindo livros...

 

E seu programa podia ser assim simples e mais fácil de ler

int main(int argc, char** argv)
{
	Biblioteca B1 = { "Ciencias II", 0 };

	Livro	L1 = {
		"sendmail",
		"Bryan Costales",
		"1-56592-839-3",
		59.95 };
	Livro	L2 = { 
		"Data Structures and Algorithms ",
		"Alfred V. Aho",
		"0-20100-023-7",
		74.99 };

	Livro L3 = somar(&L1, &L2);
	mostra(&L1);
	mostra(&L2);
	printf("\"Somando\" os registros:\n");
	mostra(&L3);

	return 0;
}

É só um exemplo cm dados copiados direto da Amazon e do seu enunciado. Mas acho que dá pra entender:

Você cria os 2 livros e mostra. Soma e mostra. Só isso. E tem a estrutura. E pode até declarar várias bibliotecas e montar os acervos :D 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!