• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Pedro2115

Crash em Vectores

14 mensagens neste tópico

Boas mais uma vez pessoal  :P

Desculpem lá incomodar mas eu tenho aqui um problemazinho num programa com vectores, ora bem e o seguinte o programa está todo direito mas quando o meto a executar ele pede a 1º temperatura e depois simplesmente crasha  :shocking:

#include <iostream>
#include <vector>
using namespace std;

int maior=0;
int menor;
int amplitude;
int media;
int x;

int main()
{
    vector <int> meses;
    
    cout<<"Introduza as temperaturas de acordo com a ordem dos meses"<<endl;
    for (x=0; x<12; x++) 
    {
        cout<<"Introduza a temperatura do"<<x + 1<<"mes"<<endl;
        cin>>meses[x];
        if (meses[x]> maior) maior=meses[x];
        if (meses[x] < menor) menor=meses[x];
        amplitude= maior-menor;
        }
        
        media= (meses[1] + meses[2] + meses[3] + meses[4] + meses[5] + meses[6] + meses[7] + meses[8] +
meses[9] + meses[10] + meses[11] + meses[12]) /12;


          cout<<"A temperatura mais elevada e"<<maior<<endl;
          cout<<"A temperatura mais baixa e"<<menor<<endl;
          cout<<"A temperatura media e de:"<<media<<endl;
       
      
        system("pause");
        }

Se alguém puder ajudar ai agradecia  :D

Ps: é a 1º vez que uso vectores mas acho que não está nada errado :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não deste um tamanho ao vector... experimenta por exemplo:  vector <int> meses(13);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não deste um tamanho ao vector... experimenta por exemplo:  vector <int> meses(13);

Epah sinto-me um autentico nabo  :wallbash: :P

Tive o dia todo de ontem a olhar para isto e era uma coisa tão simples  :D Obrigadão pela ajuda King e pelo link M6 :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ninguém nasce ensinado, Pedro. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

M6 tens razão  :D

Olha eu encontrei outro problema também a trabalhar com vectores é o seguinte, eu queria guarda uma string num vector eu já vi por ai que se deve fazer assim acho eu:

char *normal[10]

O meu problema consiste em imprimir a string já procurei e não encontrei nada :S

Se for preciso meto aqui o código  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

cout<<"Introduza as temperaturas de acordo com a ordem dos meses"<<endl;
    for (x=0; x<12; x++)
    {
        cout<<"Introduza a temperatura do"<<x + 1<<"mes"<<endl;
        cin>>meses[x];
        if (meses[x]> maior) maior=meses[x];
        if (meses[x] < menor) menor=meses[x];
        amplitude= maior-menor;
        }

media= (meses[1] + meses[2] + meses[3] + meses[4] + meses[5] + meses[6] + meses[7] + meses[8] +
meses[9] + meses[10] + meses[11] + meses[12]) /12;

isto é extremamente desnecessário, tu em C++, a usar vectores, raramente tens de atribuir um tamanho fixo (só quando precisas de poupar MUITO na memória). Em vez disso faz:

cout << "Introduza as temperaturas de acordo com a ordem dos meses: " << endl;

for(int i = 0;i<12;i++){
     int tmp = 0;
     cout<<"Introduza a temperatura do "<<x + 1<<" mes: ";
     cin >> tmp;
     mese.push_back(tmp);
     
     if(meses[i] > maior){
        maior = meses[i];
     }else if(meses[i] < menor){
        menor = meses[i];
        amplitude = maior - menor;
     }else cout << "Erro!" << endl;
}

o push_back adiciona um elemento ao vector e incrementa o tamanho deste.

media = 0;
for(int i = 0;i < 13; i++){
media += media[i];
}

somar elemento a elemento, só se justifica se forem poucos elementos (o que não é o caso, são 12) ou quando estás limitado em processamento.

strings é facil:

#include <iostream>
#include <string>

using namespace std;

int main(){
  string ola = "ola mundo!";
  cout << "\t" + ola;
  return 0; 
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Metalium obrigadão pela dica  :)

Olha uma coisa eu se calhar no das strings expliquei-me mal  :D

É assim eu tenho este código e está tudo bem e tal mas no momento de imprimir ele não me imprime a palavra que devia ser trocada  :S

Se pudessem dar ai uma dica para me guiar agradecia  :)

#include <iostream>
using namespace std;

int main()
{
    char string[50];
    cout<<"insira a sua palavra"<<endl;
    cin>> string;

    int n = sizeof(string) - 1; 

    char troc[n+1]; 

    for (int j = 0; j < n; j++)
    {
        troc[j] = string[n-j-1];  
        			
           }   			


    cout << "Palavra inicial: " << string << endl;
    cout << "Palavra invertida: " << troc << endl;

    cin.get();
    cin.get();
    return 0;
    system("pause");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a ver nenhum problema aparente, mas não será pelo valor que estás a dar ao n ?

Quando fazes um sizeof, está a retornar o tamanho do teu array 'string', ou seja, vai te dar sempre 50 nem que só insiras 3 caracteres e quando entrares no ciclo for, só vai parar quando chegar aos 50 dando-te caracteres que estão para lá do '\0' ou seja, nulos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm King então pelo que entendi eu tenho de fazer um ciclo que corra o array até chegar ao '\0' guardar o numero de casas ocupadas numa variável e a partir dai fazer a troca para outro array, isto assim por alto  B)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para já deves inicializar o troc no início da função tal como fazes com o string (50 casas). Para determinar o tamanho podes utilizar strlen, ou então fazer um ciclo como disseste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadão Pedro já funciona  :)

Obrigado a todos pela ajuda  B) Acho que já podem encerrar. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadão Pedro já funciona  :D

Obrigado a todos pela ajuda  :) Acho que já podem encerrar. :P

Em baixo podes marcar o tópico como resolvido...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em baixo podes marcar o tópico como resolvido...

Sorry só reparei agora quando vi a tua resposta  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora