Ir ao conteúdo
  • Cadastre-se

C++ Meu programa de matriz está dando erro


matheus l porto

Posts recomendados

Programa está dando dois erros

#include <stdio.h>  
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream>

using namespace std;


void menu();
void tabela();
void media();
void sensor();
void distancia();
void ativar();

int opc = 0;

int main()
{
    while(opc !=4)
    {
        menu();
        switch(opc)
        {
        case 1:
            tabela();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        case 2:
            media();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        case 3:
            sensor();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        case 4:
            distancia();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        case 5:
            ativar();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        case 6:
            sensor();
            printf("\nConcluido!\nAperte qualquer tecla para prosseguir");
            getch();
            system("cls");
            break;
        }
    }

    return 0;
}

void menu()
{
    printf("1 - Tabela\n");
    printf("2 - Média das temperaturas\n");
    printf("3 - Quais leituras o sensor está ativo\n");
    printf("4 - Distância medida\n");
    printf("5 - Ativa o atuador (0-Para nao e 1-Para sim)\n");
    printf("6 - Sair\n");
    printf("DIGITE SUA OPCAO: ");
    scanf("%d", &opc);
}

void tabela(){

		int matriz[3][4];
		int l, c;
		   matriz[0][0]=1;
		   matriz[0][1]=1;
		   matriz[0][2]=0;
		   matriz[0][3]=1;
		   matriz[1][0]=200;
		   matriz[1][1]=120;
		   matriz[1][2]=300;
		   matriz[1][3]=248;
		   matriz[2][0]=24;
		   matriz[2][1]=30;
		   matriz[2][2]=16;
		   matriz[2][3]=20;
		   for(l=0;l<3;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
		   }
		   
		   
           }


void media(){
	int matriz[1][4];
		int l, c;
		   matriz[0][0]=24;
		   matriz[0][1]=30;
		   matriz[0][2]=16;
		   matriz[0][3]=20;
		   for(l=0;l<1;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
		   }
	
   
}

    void sensor(){
    	int matriz[1][4];
		int l, c;
		   matriz[0][0]=1;
		   matriz[0][1]=1;
		   matriz[0][2]=0;
		   matriz[0][3]=1;
		   for(l=0;l<1;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
		   }
	
	void distancia()
	{
		int matriz[1][4];
		int l, c;
		   matriz[0][0]=200;
		   matriz[0][1]=120;
		   matriz[0][2]=300;
		   matriz[0][3]=248;
		   for(l=0;l<1;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
				}
		
	}
	
	void ativar(){
		int matriz[1][4];
		int l, c;
		   matriz[0][0]=1;
		   matriz[0][1]=1;
		   matriz[0][2]=0;
		   matriz[0][3]=1;
		   for(l=0;l<1;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
				}
		
  
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Seu programa não está bom. Tem muitos problemas.

O erro mesmo, como disse @Lucca Rodrigues está na falta da chave no final da função. Mas compilar o programa é só um detalhe.

 

Poste o enunciado para que se entenda melhor o que está tentando fazer. 
 

Para um programa em C++ está muito longe do que se escreve normalmente. Talvez seu professor tenha a ideia infeliz de explicar uma linguagem a partir da outra e isso nunca vai dar certo. Só vai atrasar o aprendizado.

 

Seu programa não tem um único comentário

 

Algumas coisas para considerar:

  • Nunca use variáveis globais. Isso é um pesadelo e sempre vai cair na sua cabeça. Em geral é proibido em empresas e escolas. Não declare NADA fora de main()
     

  • evite retornar void: em geral é um desperdício. Muitas vezes um erro
     

  • Não há razão para incluir conio.h. Essa é uma biblioteca dos anos 80 e nada acrescenta a um programa moderno. Mesmo nos anos '80 ela era usada em geral apenas para ler letrinhas do teclado sem mostrar na tela, limpar a tela e escrever letrinhas com cores --- getch(), kdhit(), clrscr() e textcolor(). A mesma coisa que estava disponível em C no Windows e no Unix depois Linux em poucas linhas
     

  • Não use system() para nada. Não estará fazendo nada. Não há praticamente nada que possa fazer com system() que não possa fazer em C ou C++. system() foi escrita em C e o sistema quase todo também. E em geral é proibido em empresas e escolas afinal: é um risco grande de segurança. E se tem algo que você não possa inicialmente fazer em C ou C++ talvez não deva mesmo fazer
     

  • Use alguma ordem em suas funções, como a ordem alfabética por exemplo. Vai gostar disso quando seu programa tiver 50 funções ao invés de umas poucas. Muitos IDE mostram uma lista das funções, em geral na ordem em que foram declaradas, de modo que você pode clicar no nome e o editor vai direto para o código. E se estiverem em ordem é claro que você só ganha

 

  • Nunca leia valores do teclado para alimentar seu programa antes dele estar rodando. Só vai te atrasar e não acrescenta absolutamente nada. Use constantes, use funções que retornam a estrutura preenchida. Ao terminar os  testes aí sim incorpore a leitura.
     
  • Alinhe seu código com algum critério. Evite longas linhas com mais de 60 colunas.
     
  • Se seu programa tem um menu, entenda que o menu() deve mostrar as opções e ler e retornar a opção. Um void menu() é um desperdício.
     
  • scanf() foi escrita para ler entrada formatada. Não use para ler do teclado, que claramente não é entrada formatada. Só vai dar mais trabalho. Muito mais trabalho.
     
  • Ao usar scanf() ou alguma função da família, como fscanf() entenda que ela retorna um valor. E teste. É ingênuo deixar o programa seguir sem testar.

Afinal está escrevendo um programa em C ou C++?

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto

26 minutos atrás, arfneto disse:

Não há razão para incluir conio.h. Essa é uma biblioteca dos anos 80 e nada acrescenta a um programa moderno. Mesmo nos anos '80 ela era usada em geral apenas para ler letrinhas do teclado sem mostrar na tela, limpar a tela e escrever letrinhas com cores --- getch(), kdhit(), clrscr() e textcolor(). A mesma coisa que estava disponível em C no Windows e no Unix depois Linux em poucas linhas

Opa, uma pergunta... A getch() lê um caractere do teclado, e o mesmo é retornado sem esperar pelo Enter, isso está disponível em C no Windows?

Eu tinha visto uma implementação da getch() usando a windows.h, no caso aí foi feito em C++, mas não importa:

#include <iostream>
#include <windows.h>
 
using namespace std;
 
TCHAR getch() {
  DWORD mode, cc;
  HANDLE h = GetStdHandle( STD_INPUT_HANDLE );
  if (h == NULL) {
        return 0; // console not found
  }
  GetConsoleMode( h, &mode );
  SetConsoleMode( h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) );
  TCHAR c = 0;
  ReadConsole( h, &c, 1, &cc, NULL );
  SetConsoleMode( h, mode );
  return c;
}
 
int main() {
    TCHAR k;
    while ((k = getch()) != 'Z') {
        cout << "Key: " << k << " = " << (int)k << endl;
    }
    return 0;
}

É isso o que quis dizer?

  • Amei 1
Link para o comentário
Compartilhar em outros sites

37 minutos atrás, Lucca Rodrigues disse:

Opa, uma pergunta... A getch() lê um caractere do teclado, e o mesmo é retornado sem esperar pelo Enter, isso está disponível em C no Windows

 

Considere que getch() roda em Windows então...  

 

Acho que eu já escrevi sobre isso naquele tema dos menus que te mostrei.

 

Esperar pelo ENTER é opcional. Se chama LINE INPUT MODE no Windows e COOKED MODE no Linux.

Basta você desligar esse modo nesses sistemas e poderá ler assim, sem esperar com um ENTER.

 

No Windows tem essa outra possibilidade que é a que te mostrei naquele tópico: NÃO LER. Apenas ver o que tem no buffer de teclado e apagar ao invés de ler... Tem o exemplo lá.

 

Sobre o LINE INPUT MODE: 
 

image.thumb.png.f01ff9ccf446c53455c4034ae7592175.png

 

Não precisa de nada especial. Pode usar os mesmos comandos. Não precisa escrever novas funções nem nada. Não sei porque vejo fazerem isso. Veja a documentação, bem completa por sinal, em https://docs.microsoft.com/en-us/windows/console/setconsolemode

 

No linux apenas use num terminal man termios e verá o que precisa saber... 

 

No Linux vai mudar os parâmetros VMIN e VTIME.

 

A diferença é que nos dois sistemas um fgetc() ou read() retornam na hora com o que tem pra ler


 

47 minutos atrás, Lucca Rodrigues disse:

Eu tinha visto uma implementação da getch() usando a windows.h, no caso aí foi feito em C++, mas não importa

 

Pois é.

 

Talvez o certo seja escrever uma função para desligar o LINE INPUT ou o COOKED MODE conforme veja se está em Windows ou Linux.

 

E não mexer no resto. 

Não precisa mudar nada.

 

Apenas salve o modo da console. Altere. Use., Restaure. Nada mais. Não precisa de outra função para ler: já tem muitas.

@matheus l porto Por exemplo, compare isso

 

void tabela(){

		int matriz[3][4];
		int l, c;
		   matriz[0][0]=1;
		   matriz[0][1]=1;
		   matriz[0][2]=0;
		   matriz[0][3]=1;
		   matriz[1][0]=200;
		   matriz[1][1]=120;
		   matriz[1][2]=300;
		   matriz[1][3]=248;
		   matriz[2][0]=24;
		   matriz[2][1]=30;
		   matriz[2][2]=16;
		   matriz[2][3]=20;
		   for(l=0;l<3;l++){
				for(c=0;c<4;c++){
					cout << matriz[l][c] << " ";	
				}
				cout << "\n" ;
		   }
		   
		   
           }

 

Com o simples
 

void tabela(){

		int matriz[3][4] =
        { 
            { 1,1,0,1 },
            { 200,120,300,248 },
            { 24,30,16,20 }
        };
		for(int l=0;l<3;l++)
        {
			for(int c=0;c<4;c++)
				cout << matriz[l][c] << " ";	
			cout << "\n" ;
		};  // for
 }; // tabela()

 

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!