Jump to content

Crash em Vectores


Pedro2115
 Share

Recommended Posts

Boas mais uma vez pessoal  😛

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  ?

#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  😄

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

Link to comment
Share on other sites

M6 tens razão  😄

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  😛

Link to comment
Share on other 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; 
}
Link to comment
Share on other sites

Metalium obrigadão pela dica  🙂

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

É 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");
}
Link to comment
Share on other 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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.