C++ ... Apanhando q nem cachorro sem dono.... (INICIANTE)

10 respostas
Jauns

Não tem conhecimento em C++, mas ja consigo fazer algo em java…

Estou tentando resolver 2 problemas… Reforço q naum tenho conhecimento em C++… Mas se alguem puder me ajudar a resolver estes dois problemas…

  1. Foi feita uma estatística nas 50 principais cidades brasileiras para coletar dados sobre acidentes de trânsito. Foram obtidos os seguintes dados:

1? Código da cidade
2? Estado (RS, SC, PR, SP, RJ, …)
3? Número de veículos de passeio (em 2002)
4? Número de acidentes de trânsito com vítimas (em 2002)

Deseja-se saber:

a) qual o maior e o menor índice de acidentes de trânsito e a que cidades pertencem;

b) qual a média de veículos nas cidades brasileiras;

c) qual a média de acidentes com vítimas entre as cidades do Estado de Pernambuco. </blockquote>
#include<stdio.h>
#include<stdlib.h>

int main()
{


	char cidade[40],estado[3];
	char* maior_cidade,* menor_cidade,* tpe;
	int qtde_veiculo,qtde_acidente,sair;
	int tot_cidade,tot_veiculo=0,tot_acidente,tot_veic_pe,tot_acid_pe;
	float indice,maior_indice,menor_indice,media,media_pe;

	while(sair!=0)
	{

		printf("\nQual o nome da cidade");
		scanf("%s",&cidade);
		printf("\nQual o nome do estado");
		scanf("%s",&estado);
		printf("\nDigite a quantidade de veiculo");
		scanf("%d",&qtde_veiculo);
		printf("\nDigite a quantidade de acidente");
		scanf("%d",&qtde_acidente);

		tot_cidade++;

		if (qtde_veiculo>0)
			tot_veiculo=tot_veiculo+qtde_veiculo;

		if(tot_acidente>0)
			tot_acidente=tot_acidente+qtde_acidente;       

		indice=qtde_acidente/qtde_veiculo;

		if(tot_cidade==0)                 
		{
			maior_cidade=cidade;
			maior_indice=indice;
			menor_cidade=cidade;
			menor_indice=indice;

		}

		if(indice>maior_indice)
		{
			maior_cidade=cidade;
			maior_indice=indice; 
		}  
		if(indice<menor_indice)
		{              
			menor_cidade=cidade;
			menor_indice=indice;                 
		}              
		media=tot_veiculo/tot_cidade;

		

	//	if(estado==p)
	//	{
			tot_veic_pe=tot_veic_pe+qtde_veiculo;
			tot_acid_pe=tot_acid_pe+qtde_acidente;
			media_pe=tot_veic_pe/tot_acid_pe;
	//	}
		printf("Digite 0 para sair e 1 para continuar");
		scanf("%d",&sair);


	} 


	printf("\nA cidade que possui maior indice de acidente foi:%s",maior_cidade);
	printf("\nSeu indice foi: %5.2f",maior_indice);
	printf("\nA cidade que possui menor indice de acidente foi:%s",menor_cidade);
	printf("\nSeu indice foi:%5.2f",menor_indice);
	printf("\nA media de veiculos nas cidades brasileiras e:%5.2f",media);
	printf("\nA media de acidentes no estado do Pernambuco foi:%5.2f",media_pe);
	getchar();
	getchar();
	return 0;

}

no java seria… ma no C++… (ja pesquisei no google);;;

if(estado.equals("pe")
         {
			tot_veic_pe=tot_veic_pe+qtde_veiculo;
			tot_acid_pe=tot_acid_pe+qtde_acidente;
			media_pe=tot_veic_pe/tot_acid_pe;
	}

Outra coisa… como faço pra trabalhar corretamente com String… tipo, ler uma variavel, e imprimir posteriormente seu resultado ou alterar seu valor…


2) Implemente um programa que leia um número inteiro positivo e imprima os algarismos que
compõem o número. Exemplo:
Entrada: 102

#include<stdio.h>
#include<stdlib.h>

int main()
{
    
    char valor[40];
     
    printf("Digite um numero");
    scanf("%s",&valor);
    
    for(int cont=0; ????????  {
      char* str=valor.substr(???????);
    
    
    printf("%s",str);
}
    
        getchar();
    getchar();
    return 0;

}

10 Respostas

marciofermino

Amigo aqui é forum sobre JAVA e não C++ e esses pronblemas escolares não resolvemos aqui.

Jauns

Existe o topico no forum referente a outras linguagens, local onde postei a dúvida, acredito eu q C++ eh uma outra linguagem… Se caso não queira responder, bastar não responder…

Problemas escolares… Realmente… tem q se aprender em algum lugar… e pode contar com pessoas q se interesem a responder e não com pessoas q preferem da uma resposta seca…

mduques

boa heuheuhe

mauro80

Para você ler uma variável do teclado no java, vc pode utilizar a classe Scanner. Alguma coisa como:
Scanner scanner = new Scanner(System.in); (não lembro ao certo)

Quanto às outras dúvidas não entendi…

thiagolopes

Amigo eu sei fazer este seu programa em java, mas infelizmente não em c++, mas achei algo que você estava procurando:

1-Comparação de Strings em C++:

Da uma olhadinha neste código que eu achei:
include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  string str1("Java");
  string str2("JAVA");

  if(str1.compare(str2) == 0)
    cout << str1 << " é igual a " << str2 << "\n";
  else
    cout << str1 << " é diferente de " << str2 << "\n";
	  
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Abraços meu velho, espero ter lhe ajudado!

T
  1. Isso que você postou aqui está mais para C que para C++.
    Em C++ você não deve usar scanf ou char[] e sim "cin>>" e "std::string".
  2. Você precisa criar uma classe para conter os dados (já que é C++), e usar um vector<> dessa classe para poder sumarizar os dados.
  3. Não dê bola pro Marcio Fermino - aqui também resolvemos problemas de C++.
  4. Não use float para fazer contas em C++ de jeito nenhum, a menos que você saiba muito bem o que está fazendo. Use double sempre.
Andre_Brito

Oi.
Isso não é necessariamente C++, mas sim C. Eu, pelo menos, considero um programa em C++ quando alguma biblioteca da STL é usada e quando têm-se classes e headers.

Bom, sobre as suas dúvidas.
A estrutura básica de uma string é um array de chars. Supondo que você não tenha um tamanho definido e tenha que chutar um valor alto (tipo 100) (array de char de 100 posições). Você sabe que a string termina lendo o último caractere, que é sempre ‘\0’.
Por exemplo, fiz o código abaixo e consigo imprimir o que foi digitado de duas formas: usando %s e usando um while.

#include <stdio.h>

int main()
{
	char a[100];
	
	printf("Digite o seu nome: ");
	scanf("%s", &a);

	printf("Nome digitado: %s\n", a);

	int i = 0;
	while (a[i] != '\0')
	{
		printf("Posicao %d: %c\n", i, a[i]);
		i++;
	}
	
	return 0;
}

A entrada:

Quando a string tem espaços, acho que é necessário o uso de expressões regulares (na hora de ler você deve colocar quais caracteres devem ser lidos. É um pouco parecido com Java). Dá uma procurada no Google que você acha (ou em um livro).
String é um saco de manipular em C. Se você puder fazer em C++, use a biblioteca da STL string.

Sobre sua segunda dúvida, você não precisa usar string, somente um pouco de lógica (usando o operador módulo, %).

Abraço.

[editado]
Nossa pessoal, me desculpem. Mas fui responder e cliquei no botão de responder antes de fazer os códigos :confused:

Faço do thingol as minhas palavras. E peço desculpas mais uma vez aos que responderam.
[/editado]

T

Vou dar meio pronto, mas você é esperto e vai saber completar isto aqui.

/*
1) Foi feita uma estatística nas 50 principais cidades brasileiras para coletar dados sobre acidentes de trânsito. Foram obtidos os seguintes dados:

1? Código da cidade
2? Estado (RS, SC, PR, SP, RJ, ...)
3? Número de veículos de passeio (em 2002)
4? Número de acidentes de trânsito com vítimas (em 2002)

Deseja-se saber:
a) qual o maior e o menor índice de acidentes de trânsito e a que cidades pertencem;
b) qual a média de veículos nas cidades brasileiras;
c) qual a média de acidentes com vítimas entre as cidades do Estado de Pernambuco.
*/

#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class EstatisticaTransito
{
public:
    string codigoCidade;
    string estado;
    int nVeiculosPasseio;
    int nAcidentesTransito;
public:
    string toString() 
    {
        return "A cidade de " + codigoCidade + ", no estado de " + estado + ", com " + nVeiculosPasseio + " veiculos de passeio, " + " teve " + nAcidentesTransito + " em 2002.";
    }    
};

void ler (vector&lt;EstatisticaTransito&gt;& estatisticasTransito)
{
    while (true)
    {
        EstatisticaTransito et;
        cout &lt;&lt; "Entre com o código da cidade, ou uma linha vazia para parar:" &lt;&lt; endl;
        getline (cin, et.codigoCidade);
        if (et.codigoCidade.empty()) 
        {
            break;
        }
        cout &lt;&lt; "Sigla do estado:" &lt;&lt; endl;
        cin &gt;&gt; et.estado;
        cout &lt;&lt; "Numero de veiculos de passeio:" &lt;&lt; endl;
        cin &gt;&gt; et.nVeiculosPasseio;
        cout &lt;&lt; "Numero de acidentes de transito com vitimas " &lt;&lt; endl;
        cin &gt;&gt; et.nAcidentesTransito;
        estatisticasTransito.push_back (et);
    }
    cout &lt;&lt; "Foram coletados os dados de " &lt;&lt; estatisticasTransito.size() &lt;&lt; " cidades." &lt;&lt; endl;
}

void indiceMaximoAcidentesTransito (vector&lt;EstatisticaTransito&gt;& estatisticasTransito, vector&lt;EstatisticaTransito&gt;& maximoAcidentesTransito)
{
    // Primeiramente vamos ver qual é o máximo dos acidentes, e depois ver que cidades têm esse valor máximo. 
    int maximo = 0;
    for (int i = 0; i &lt; estatisticasTransito.size(); ++i)
    {
        maximo = max (maximo, estatisticasTransito [i].nAcidentesTransito);
    }
    // Uma vez que achamos o valor máximo, vamos coletar as cidades com esse valor máximo.
    for (int i = 0; i &lt; estatisticasTransito.size(); ++i) 
    {
        EstatisticaTransito et = estatisticasTransito[i];
        if (et.nAcidentesTransito == maximo)
        {
            maximoAcidentesTransito.push_back (et);
        }
    }
}

void indiceMinimoAcidentesTransito (vector&lt;EstatisticaTransito&gt;& estatisticasTransito, vector&lt;EstatisticaTransito&gt;& minimoAcidentesTransito)
{
    /// Faça parecido com a rotina acima, mas calcule o valor mínimo, não o máximo
}


double mediaVeiculos (vector&lt;EstatisticaTransito&gt;& estatisticasTransito)
{
    /// Acho que você entendeu como é que se percorre um vetor de EstatisticaTransito. É por sua conta.
}

double mediaAcidentesComVitimasPorEstado (vector&lt;EstatisticaTransito&gt;& estatisticasTransito, string estado)
{
    // Vou dar uma colher de chá para você,  para ver como é que se comparam strings em C++
    double total = 0;
    int nCidades = 0;
    for (int i = 0; i &lt; estatisticasTransito.size(); ++i) 
    {
        EstatisticaTransito et = estatisticasTransito[i];
        if (et.estado == estado) // a comparação é bastante simples, como você pode ver aqui.
        {
            total += et.nAcidentesTransito;
            nCidades++;
        }
    }
    return total / nCidades;
}

int main (int argc, char*argv[])
{
    vector &lt;EstatisticaTransito&gt; estatisticasTransito;
    //-----
    ler (estatisticasTransito);
    //-----
    vector &lt;EstatisticaTransito&gt; maximoAcidentesTransito;
    indiceMaximoAcidentesTransito (estatisticasTransito, maximoAcidentesTransito);
    cout &lt;&lt; "A(s) cidade(s) com maior indice de acidentes de transito no Brasil eh (sao)" &lt;&lt; endl;
    for (int i = 0; i &lt; maximoAcidentesTransito.size(); ++i)
    {
        EstatisticaTransito et = maximoAcidentesTransito [i];
        cout &lt;&lt; et.toString() &lt;&lt; endl;
    }
    //-----
    vector &lt;EstatisticaTransito&gt; minimoAcidentesTransito;
    indiceMinimoAcidentesTransito (estatisticasTransito, minimoAcidentesTransito);
    cout &lt;&lt; "A(s) cidade(s) com menor indice de acidentes de transito no Brasil eh (sao)" &lt;&lt; endl;
    for (int i = 0; i &lt; minimoAcidentesTransito.size(); ++i)
    {
        EstatisticaTransito et = minimoAcidentesTransito [i];
        cout &lt;&lt; et.toString() &lt;&lt; endl;
    }
    //-----
    double mv = mediaVeiculos (estatisticasTransito);
    cout &lt;&lt; "Media de veiculos nas cidades brasileiras" &lt;&lt; mv &lt;&lt; endl;
    //-----
    double av = mediaAcidentesComVitimasPorEstado (estatisticasTransito, "PE");
    cout &lt;&lt; "Media de acidentes com vitimas no estado de Pernambuco " &lt;&lt; av &lt;&lt; endl;
}
Jauns
T

Para quem nunca viu um programa em C++ usando <string>, <vector> e <iostream>, vai achar razoavelmente parecido com Java, exceto pelos operadores ">>" e "<<". Mas quem fez um curso de C++ qualquer deve saber usar "<<" e ">>" sem pestanejar.

Criado 9 de dezembro de 2008
Ultima resposta 9 de dez. de 2008
Respostas 10
Participantes 7