Jump to content
Sign in to follow this  
Pedro2115

Crash em Vectores

Recommended Posts

Pedro2115

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  😲

#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

Share this post


Link to post
Share on other sites
KiNgPiTo

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

Share this post


Link to post
Share on other sites
M6

Se estás a usar um vector, tens de usar os métodos disponíveis.

Dá uma olhadela aqui para te ajudar: http://www.cppreference.com/wiki/stl/vector/start


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Pedro2115

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

Share this post


Link to post
Share on other sites
M6

Ninguém nasce ensinado, Pedro. :P


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Pedro2115

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

Share this post


Link to post
Share on other sites
Metaluim

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; 
}

Share this post


Link to post
Share on other sites
Pedro2115

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");
}

Share this post


Link to post
Share on other sites
KiNgPiTo

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

Share this post


Link to post
Share on other sites
Pedro2115

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)

Share this post


Link to post
Share on other sites
pedrosorio

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.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
Pedro2115

Obrigadão Pedro já funciona  :)

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

Share this post


Link to post
Share on other sites
KiNgPiTo

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

Share this post


Link to post
Share on other sites
Pedro2115

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

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

Share this post


Link to post
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
Sign in to follow this  

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