Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

art001

[Resolvido] Problemas com visual c++ 2008

Recommended Posts

Bom dia, eu estou com problemas neste seguinte código:

 

#include <iostream>
#include <stdio.h>

int main()
{
int a, b, c, d;
printf("Digite o numero de linhas da matriz 1: ");
scanf("%d", &a);
printf("\nDigite o numero de colunas da matriz 1: ");
scanf("%d", &B);
printf("\n\nDigite o numero de linhas da matriz 2: ");
scanf("%d", &c);
printf("\nDigite o numero de colunas da matriz 2: ");
scanf("%d", &d);
printf("\n");
int e, f, g, h, i, j, x; 
   float m[a][b], m1[c][d], m2[a][d], subs = 0;
e = 0;
f = 0;
g = 0;
h = 0;
if (b != c) {
	printf("A multiplicação não pode ser efetuada, pois o numero de colunas da primeira matriz deve ser igual ao numero de linhas da segunda matriz.\n");
	return 0;
}
else
{
	while (e < a)
	{
		while (f < B)
		{
			printf("Digite o elemento da linha #%d e coluna #%d da matriz 1: ", e + 1, f +1);
			scanf("%f", &m[e][f]);
			printf("\n");
			f++;
		}
		printf("\n\n");
		f = 0;
		e++;
	}
	while (g < c)
       {
		while (h < d)
		{
			printf("Digite o elemento da linha #%d e coluna #%d da matriz 2: ", g + 1, h +1);
			scanf("%f", &m1[g][h]);
			printf("\n");
			h++;
		}
		printf("\n");
		h = 0;
		g++;
	}
	for (i = 0; i < a; i++)
	{
           for (j = 0; j < d; j++)
           {
               m2[i][j] = 0;
               for (x = 0; x < c; x++)
               {
                   subs += m[i][x] * m1[x][j];
               }
               m2[i][j] = subs;
               subs = 0;
           }
       }
       printf("\n\n------------------------------- 1- Matriz formada ------------------------------\n\n");
       for (i = 0; i < a; i++)
       {
           for (j = 0; j < b; j++)
           {
               printf("%f     ", m[i][j]);
           }
           printf("\n\n");
       }
       printf("\n\n------------------------------- 2- Matriz formada ------------------------------\n\n");
       for (i = 0; i < c; i++)
       {
           for (j = 0; j < d; j++)
           {
               printf("%f     ", m1[i][j]);
           }
           printf("\n\n");
       }
       printf("\n\n---------------------------- 3- Matriz multiplicada ----------------------------\n\n");
       for (i = 0; i < a; i++)
       {
           for (j = 0; j < d; j++)
           {
               printf("%f     ", m2[i][j]);
           }
           printf("\n\n");
       }
}
system("pause");
return 0;
}

 

Este código permite multiplicar duas matrizes. Eu usava o dev-c++ para programar, nele, o código funciona perfeitamente, mas eu estava migrando para o visual c++ e testei este código nele. Mas o compilador emitiu diversos erros e não sei como resolver. Gostaria que alguém me ajudasse. Os erros são os seguintes:

 

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(8) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1> c:\program files\microsoft visual studio 9.0\você\include\stdio.h(306) : see declaration of 'scanf'

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(10) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1> c:\program files\microsoft visual studio 9.0\você\include\stdio.h(306) : see declaration of 'scanf'

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(12) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1> c:\program files\microsoft visual studio 9.0\você\include\stdio.h(306) : see declaration of 'scanf'

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(14) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1> c:\program files\microsoft visual studio 9.0\você\include\stdio.h(306) : see declaration of 'scanf'

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2087: 'm' : missing subscript

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2133: 'm' : unknown size

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2087: 'm1' : missing subscript

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2133: 'm1' : unknown size

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2057: expected constant expression

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2466: cannot allocate an array of constant size 0

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2087: 'm2' : missing subscript

1>c:\users\cristian\documents\visual studio 2008\projects\teste2\teste2\teste2.cpp(17) : error C2133: 'm2' : unknown size

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Primeiro, coloque a seguinte linha na primeira linha do seu programa:

 

#define _CRT_SECURE_NO_WARNINGS

 

Isso faz com que o Visual Studio não fique enchendo o saco por causa de funções da standard que ele considera inseguras.

 

Segundo, não, esse seu programa NÃO compila no DevC++ e nem em nenhum outro compilador. Nenhum. Nem se você converter para C, não compila. Não tem jeito de vocẽ declarar uma variável 'b' e usar como 'B' e achar que vai compilar. Nunca.

 

Terceiro, olha o nome dessas variáveis. a, b, c, d. Você acha que alguém vai tentar ler esse código? Você acha que você vai lembrar para que servem essas variáveis depois de um tempo de ter consertado esse programa? Putz, pra que essa preguiça de digitar nomes de variáveis? Você pode criar variáveis com mais de 1000 caracteres no nome e você usa só 1? Ninguém vai entender esse código. Use nomes que descrevem a função da variável. Imagina você abrir um programa com 1000 linhas (o que é bem pouco) e no meio encontrar a variável "b". Você faz ideia da função dela? NÃO! E vai levar muito tempo para descobrir, mais fácil desistir. Se o nome fosse "segundoArquivo" não seria bem mais fácil de ter uma ideia? Talvez uma estrutura fstream contendo os dados de acesso a um segundo arquivo, ja que o primeiro está com seus dados possivelmente em outra variável?

 

Quarto, porque você não tenta ler o que o compilador mostrou? Esse código está todo errado, tanto que o compilador reportou erros. Porque não lê o que ele reportou? Ele está falando o que está errado, na linha que está errado, tudo fácil de corrigir. Não vamos ficar consertando o código para você, só porque está com preguiça de consertar. Vai trabalhar, o que você realmente não conseguir pergunta. E se não consegue corrigir isso, sugiro que você leia um livro em C++, pois dá pra perceber que você não entende a linguagem, ainda mais porque você está usando C no código todo menos na linha #include <iostream> (que é inútil, você pode remover e não vai mudar nada no código) e não percebeu.

 

@edit:

 

Usar e abusar de comentários também é bom.

 

 

Renato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renato, eu não me expressei muito bem ao abrir este tópico e queria esclarecer algumas coisas:

 

Primeiro, a variável "b" que foi usada posteriormente como "B" foi apenas erro de digitação, eu conferi em meu código e ele está minúsculo em todas as vezes que usei ele.

 

Segundo, você tem razão, eu devo usar nomes nas variáveis que sejam relevantes quanto ao seu uso, eu me acostumei a usar variáveis pequenas.

 

Terceiro, eu não quero que corrijam meu código, eu quero apenas uma orientação e vou deixar mais clara minha dúvida. O compilador diz que o tamanho das matrizes que eu declarei não é conhecido, ou seja, ao invés de eu usar as variáveis a, b, c e d para definir o tamanho de linhas e colunas das matrizes, eu teria que colocar números no lugar dessas variáveis. O problema é que o numero de linhas e colunas precisa ser variáveis, pois é o usuário que vai declarar quantas linhas e colunas ele quer para cada matriz. E minha dúvida é essa, como resolver este problema? Como disse anteriormente, no dev-c++ ele aceita que eu coloque variáveis para definir o numero de linhas e colunas.

 

Quarto, eu sou iniciante em programação c++, há pouco tempo comecei a estudar, e estava estudando primeiramente C, talvez por isso meu código esteja em C, ainda não tomei uma noção da diferença entre C e C++. E eu me senti ofendido com seu comentário, pois em diversos pontos você desdenha de minha capacidade e insinua que sou preguiçoso, pois saiba que estou há dias tentando resolver este problema. Meu código pode estar cheio de erros, mas não é motivo para você me ofender, até porque, como eu falei, sou iniciante ainda e tenho muito o que aprender, então, com certeza, com o tempo os meus códigos irão melhorar(espero eu).

 

E quer saber? Não quero mais que me ajude, esqueça a minha dúvida e pode fechar este post. E fique sabendo que não volto mais neste site para tirar dúvidas. Eu apenas queria apoio em um código e no fim perdi quase toda minha vontade de me tornar um programador. Eu espero que nem todos moderadores deste site sejam tão duros com os visitantes do site e não se achem no direito de julgar alguém, por exemplo, de preguiçoso, apenas porque possui mais conhecimento do que eles.

 

Arthur.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.