Marcelo Utikawa da Fonseca
Membros-
Total de itens
297 -
Registro em
-
Última visita
Tudo que Marcelo Utikawa da Fonseca postou
-
Quantidade de linhas da matriz
pergunta respondeu ao Diogo Rupolo de Marcelo Utikawa da Fonseca em C, C++
Tente isso: #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) Use como se fosse uma função: tamanho = ARRAY_SIZE(A1); Abraços, Marcelo Utikawa da Fonseca -
Olá! Sei código parece estar correto. O único problema é com a declaração da matriz. Você declarou a matriz como sendo 2x2 mas os seus loops consideram 10x10. Corrija isso que deve resolver seu problema! Abraços, Marcelo Utikawa da Fonseca
-
Olá! Existem algumas coisas no seu programa que são o motivo de não funcionar: 1- Ao invés de declarar frase como ponteiro e usar o strdup, declare frase como vetor. char frase[100], letra; 2- para comparar um char, use aspas simples. Aspas dupla indicam uma sequência de caracteres. if(letra == 'A') Edit: Remova a linha com o strdup Abraços, Marcelo Utikawa da Fonseca
-
Bom dia! Não é besteira sua não! É muito bom isso, realmente ajuda a entende melhor... E não é exploração, fique tranquilo! Quem responde está disposto a ajudar, ninguém faz nada obrigado... :) Sobre a sua dúvida: eu não entendi exatamente o que você quis dizer. Você diz sobre como exibir o tabuleiro em só ou como calcular o número de bombas em inq determinada posição? Eu pensei um pouco agora e imaginei o seguinte: Para desenhar o tabuleiro é necessário saber duas coisas: 1- Se o usuário já escolheu o campo ou não (para saber se o campo está oculto) 2- Número de bombas adjacentes Assim precisaríamos de duas matrizes em um primeiro momento. Mas podemos fazer da seguinte forma: iniciar toda a matriz com -2. Esse é o valor que indica que está posição não foi escolhida ainda e não deve ser exibida. As bombas serão os campos que estiverem com -1 e as posições com valores a partir de zero são as que o usuário já abriu. Desta forma você exibe o tabuleiro conforme o valor em cada posição. E quando o usuário escolher uma posição, calcula-se o número de bombas adjacentes e carrega na matriz. Abraços, Marcelo Utikawa da Fonseca
-
LIsta duplamente encadeada com operador[]
pergunta respondeu ao Septimus C de Marcelo Utikawa da Fonseca em C, C++
Boa tarde! O que você diz é que criou a estrutura de dados e as funções para manipulá-las e quer saber se pode acessar os dados diretamente, correto? Como o conceito da TAD é a abstração e independência do seu código da implementação, o uso do array diretamente quebra esse paradigma... Veja que quebra o conceito da TAD, não o conceito da Lista! Talvez possam haver opiniões diferentes mas este é o meu ponto de vista. :) Abraços, Marcelo Utikawa da Fonseca -
Boa tarde! O problema é que você precisa declarar a variável antes de usá-la. Você apenas copiou o código e não declarou a variável bombas. Outro problema é que, mesmo que tivesse declarado a variável, já existe uma definição que define bombas para 1. Esse é o motivo de, por convenção, sempre criar os defines em letras maiúsculas. Além disso é útil colocar no nome da variável algo que indique seu tipo para que, ao utilizá-la, não se confunda. Assim o que você precisa mudar no seu código é trocar, no trecho de código que passei, a variável chamada "bombas" por "iBombas", por exemplo. Lembre-se de declarar a variável também: int iBombas; Outra coisa: no código que eu tinha passado, a inicialização do vetor é o carregamento com zero. Na sua lógica você colocou também uma atribuição de um valor lido com a função rand(). Essa linha é incorreta pois assim o vetor conterá qualquer valor, o que não é o que se espera após a inicialização. Assim apenas remova a linha que atribui o valor recebido de rand como abaixo: for (i=0; i<TAMCampo; i++){ for (j=0; j<TAMCampo; j++){ matrizCampo [i][j]=0; //iniciando a matriz com zero } } Abraços, Marcelo Utikawa da Fonseca
-
Implementação LibVNCServer/LibVNCClient
pergunta respondeu ao Rafael Bordin de Marcelo Utikawa da Fonseca em C, C++
De nada! A intenção é ajudar. Portanto objetivo cumprido! B) Sobre o novo erro, deve-se ao fato de que in_addr_t não foi definido. Inclua no seu programa a seguinte linha: #include <winsock2.h> Isso indica que você ainda não estava usando o winsock. Antes de utilizá-lo, ele deve ser inicializado. No main adicione isso: int iResult; WSADATA wsaData; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != 0) { Error(_("WSAStartup failed: %d\n"), iResult); return 1; } Abraços, Marcelo Utikawa da Fonseca -
argc indica o número de parâmetros recebidos, basta jogar ele na tela! Abraços, Marcelo Utikawa da Fonseca
-
Boa tarde! Na verdade existe um sub-fórum específico para anúncio de vagas, o qual pode ser encontrado na página inicial do fórum. Inclusive acho que este tópico será movido para lá em breve! :D Interessante a sua vaga, só não participo da seleção pois já estou empregado e a contratação seria por tempo integral... Boa sorte na procura! Abraços, Marcelo Utikawa da Fonseca
-
Ok! Mas mude uma coisa no código pois me esqueci do & no scanf ao ler a placa! O correto é: scanf("%d", &p->pilha[p->itens].placa); Abraços, Marcelo Utikawa da Fonseca
-
Realmente acabei não citando a DEV-C++, esqueci dela mesmo... :) Mas isso aconteceu pois eu não sou muito fã dela por parecer simples. Sinceramente nunca a utilizei. Eu escolheria ou a eclipse (se for pensar na possibilidade de usar a mesma interface para programar tanto em Linux ou Windows, por exemplo) ou então no Visual Studio C++ Express. A vantagem do último é que é da própria MS e portanto é muito utilizada profissionalmente. Mas escolha de IDE é algo muito pessoal. Acho que o ideal é você testar algumas para ver com qual se adapta melhor! Eu pessoalmente uso o Visual Studio para programa no Windows e o Eclipse para programar no Linux. Abraços, Marcelo Utikawa da Fonseca
-
Bom dia! Eu não sei porque mas acho que já vi isso em algum lugar! :D Para fazer cópias entre vetores é como uma atribuição. Mas depende da lógica controlar a quantidade de cartas existentes em cada vetor. Por exemplo: int CartasVetor1=0, CartasVetor2=0; int Vetor1[13], Vetor2[13]; Essa é a declaração das variáveis. Depois os vetores foram carregados como abaixo: Vetor1[0] = 1; CartasVetor1++; Vetor1[1] = 5; CartasVetor1++; Vetor2[0] = 8; CartasVetor2++; Agora é só copiar: Vetor2[CartasVetor2] = Vetor1[CartasVetor1-1]; CartasVetor2++; CartasVetor1--; Abraços, Marcelo Utikawa da Fonseca
-
Bom dia! Antes de qualquer coisa, quero comentar um pouco sobre pilhas. Elas são o que o nome diz: um conjunto de objetos agrupados de forma sequencial, como uma pilha de pratos ou mesmo uma fila de banco. Basicamente existem dois tipos de pilhas, que foram exemplificados nestes exemplos: a FILO (First In, Last Out - Primeiro a entrar, Último a sair - a pilha de pratos) e a FIFO (First In, First Out - Primeiro a entrar, Primeiro a sair - a fila de banco). Para o controle de um estacionamento seria mais normal uma lista e não uma pilha mas já que foi pedido assim, tudo bem... :) Agora sobre o seu código: As estruturas estão ok. Eu só mudaria uma coisa na definição da pilha: ao invés da variável início eu teria outras duas: tamanho e itens. Tamanho armazenaria o total de elementos que podem ser inseridos e itens seria a quantidade de elementos que existem na pilha. Outra coisa: a placa tem letras também então, a não ser que o professor falou para ser feito assim, você precisaria mudar para um char[10] como você fez com as outras variáveis. Sobre o seu "erro" o que acontece é que essa é a função cria a pilha e não a que incrementa. Incrementar a pilha seria adicionar um item a ela. Essa função cria a pilha corretamente, não há erro nenhum... :) Depois, para adicionar, use um código como o abaixo: void incrementa_pilha(tpilha *p) { if(p->itens < p->tamanho) { printf("Marca: "); scanf("%s", p->pilha[p->itens].marca); printf("Modelo: "); scanf("%s", p->pilha[p->itens].modelo); printf("Cor: "); scanf("%s", p->pilha[p->itens].cor); printf("Placa: "); scanf("%d", p->pilha[p->itens].placa); p->itens++; } else { printf("Pilha cheia!\n"); } Este código eu fiz de cabeça, no celular e dentro do tem mas acho que está correto! :D Qualquer coisa avise! Abraços, Marcelo Utikawa da Fonseca
-
Olá! Pode perguntar à vontade! :) Para programar em C/C++ você precisa de, pelo menos, um compilador. Ele é o responsável por converter o código fonte em um arquivo .exe já que, diferentemente do php, o código não é interpretado. Com o .exe gerado, basta executá-lo como um programa qualquer, não precisa de mais nada. Assim você poderia criar o código até no notepad... :P Mas normalmente se utiliza uma IDE para programar como eclipse, netbeans, codeblocks ou mesmo o visual studio express. Os dois últimos já vem com um compilador então é mais fácil para começar. Já se você está acostumado a programar em php no eclipse, por exemplo, instale um compilador e use ela mesmo. Já que você mencionou o wamp acho que você usa o windows então pode instalar o mingw. Abraços, Marcelo Utikawa da Fonseca
-
Implementação LibVNCServer/LibVNCClient
pergunta respondeu ao Rafael Bordin de Marcelo Utikawa da Fonseca em C, C++
O problema agora é que o tipo uint32_t não é definido. Esse tipo também é um typedef. Tente adicionar o stdint.h: #include <stdint.h> Abraços, Marcelo Utikawa da Fonseca -
Olá! Realmente este código está confuso para ser apenas a introdução a classes. E concordo que é muito mais do que seria feito com uma estrutura simples! Porém nesse código já se vê conceitos importantes: 1) Construtores: funções que são chamadas quando se instancia um objeto da classe, dando a oportunidade de se controlar a inicialização como valores iniciais de variáveis, etapas adicionais como carregamento de uma dll, por exemplo 2) Proteção no acesso aos dados: diferentemente do que acontece em uma estrutura, existe a proteção quanto ao acesso dos dados (através do private e protected). Assim você consegue garantir a integridade dos valores carregados nas variáveis, tornando o programa mais seguro quanto a erros de programação, por exemplo. 3) Destrutores: sempre que uma instância for destruída é possível executar uma função sua onde você pode, por exemplo, desalocar áreas de memória, notifica outras partes do programa, etc. Assim não depende do programador a realização de certas tarefas que podem ser eventualmente esquecidas, afetando a qualidade do programa. Além disso ainda existem muitas e muitas outras características na programação orientada a objetos como herança, polimorfismo, etc... Segue abaixo um exemplo mais simples: #include <stdio.h> class Pessoa { private: char nome[100]; int idade; public: void carregar(char *novo_nome, int nova_idade) { strcpy(nome, novo_nome); idade = nova_idade; } void exibir(void) { printf("Eu sou %s e tenho %d anos.\n", nome, idade); } }; int main(void) { Pessoa p; p.carregar("Fulano", 20); p.exibir(); return 0; }
-
Boa tarde! Nesse caso você precisa apenas abstrair do problema o que deve ser feito. Esquecendo um pouco a historinha, vamos ao que interessa! :) Você precisa carregar 96 valores em cada um dos vetores. Esse vetor armazena temperaturas (valores que podem ter parte decimal, ponto-flutuante) Você precisa calcular a média, ou seja, somar todos os valores em cada vetor e comparar os dois resultados. Exibir o menor valor Vamos ao Código! float TempTelha1[96], TempTelha2[96], soma1, soma2; int i; for(i=0; i<96; i++) { printf("Digite a temperatura de telha 1: "); scanf("%f", &TempTelha1[i]); printf("Digite a temperatura de telha 2: "); scanf("%f", &TempTelha2[i]); } soma1 = soma2 = 0; for(i=0; i<96; i++) { soma1 += TempTelha1[i]; soma2 += TempTelha2[i]; } if(soma1 < soma2) { printf("Telha1 tem menor media: %.02f\n", soma1/96); } else { printf("Telha2 tem menor media: %.02f\n", soma2/96); } Abraços, Marcelo Utikawa da Fonseca
-
Opa! Desculpe não responder antes, estive um pouco ocupado esses dias... :) Você pode usar qualquer banco. Isso vai depender mais é da aplicação mesmo. Se for algo simples, avalie o SQLite pois já tem API em C/C++ e não depende de servidor: http://www.sqlite.org Como um exemplo, tenho uma aplicação aqui em que tenho um equipamento rodando linux com mysql local. É uma máquina da produção e que carrega as peças que deve produzir do sistema da empresa, que está em SQL Server. Assim o mesmo programa trabalha com os dois bancos ao mesmo tempo! Abraços, Marcelo Utikawa da Fonseca
-
Implementação LibVNCServer/LibVNCClient
pergunta respondeu ao Rafael Bordin de Marcelo Utikawa da Fonseca em C, C++
Se o include referencia rfb/rfb.h, então o rfb.h não deve estar na sua pasta de trabalho mas sim em uma subpasta chamada rfb. Além disso lembre-se de usar aspas se for incluir o arquivo sem adicionar seu caminho nas opções do compilador: Esse código adiciona o arquivo rfb.h diretamente da pasta do projeto, sem exigir subpastas: #include "rfb.h" Qualquer coisa poste um fragmento do código que está dando erro e as configurações do projeto. Abraços, Marcelo Utikawa da Fonseca -
(RESOLVIDO)xxx.EXE parou de funcionar--- stdlib.h > atoi()
pergunta respondeu ao Araki de Marcelo Utikawa da Fonseca em C, C++
Eu não sou admin mas a minha sugestão é criar um tópico na seção de tutoriais pois está escrito que códigos prontos devem ser postados lá... B) http://scriptbrasil.com.br/forum/index.php?showforum=75 Abraços, Marcelo Utikawa da Fonseca -
Olá! Está ficando bem interessante. O caminho é por aí mesmo! :) Uma coisa que você deveria mudar é a forma de sorteio de bombas. No código abaixo: for (i=0; i<TAMCampo; i++){ for (j=0; j<TAMCampo; j++){ matrizCampo [i][j]=0; //iniciando a matriz com zero matrizCampo[i][j]=rand()%TAMBombas; } } Você escolhe para cada campo o numero de bombas que tem adjacentes, não é? Mas isso deve ser calculado e você deveria apenas marcar onde existe uma bomba em coordenadas aleatórias. Vamos considerar que se determinada posicao tiver -1 indica que há uma bomba nessa posição. Depois, o número de bombas adjacentes devem ser calculadas pelo código. Por exemplo: // Primeiro inicializa a matriz for (i=0; i<TAMCampo; i++){ for (j=0; j<TAMCampo; j++){ matrizCampo [i][j]=0; //iniciando a matriz com zero } } // Agora carrega as bombas bombas=0; while(bombas < TAMBombas) { // Escolhe uma posicao aleatoriamente i = rand()%TAMCampo; j = rand()%TAMCampo; // Se não existir uma bomba nessa posicao, marca e incrementa bombas if(matrizCampo [i][j] == 0) { matrizCampo [i][j] = -1; bombas++; } } Abraços, Marcelo Utikawa da Fonseca
-
Bem... acho que não existe nenhuma fórmula mágica quanto a primeiro programa... A não ser o hello world que é obrigação!!! :D Por falar em hello world, segue em C e C++: C #include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; } C++ #include <iostream> using namespace std; int main(void) { cout << "Hello World!" << endl; return 0; } Mas muitas vezes o primeiro programa que dizem para fazer é um cadastro. Isso porque com ele se usam diversos recursos como loops, vetores, etc. Eu recomendo muito começar por algum tutorial. Procure na net e com certeza encontrará muitos!!! E pergunte à vontade pois sempre vocÊ terá respostas por aqui! :) Abraços, Marcelo Utikawa da Fonseca
-
Resumidamente: é possível fazer TUDO!!! Desde criar um cadastro de locadora até criar o próprio ASP, PHP ou o Windows!!! :P Claro que existem linguagens mais fáceis de fazer algumas coisas mas se a pergunta é o que é possível fazer, essa é minha resposta... :D Exemplo: o kernel do linux é feito totalmente em linguagem C (nem C++ é). Com ele uma infinidade de dispositivos são controlados. Desde um aparelho DVD até a injeção de um automóvel. Basicamente qualquer área que exiga um software otimizado (como no caso de um jogo, por exemplo) irá utilizar muito C e C++. Se quiser saber mais sobre alguma área é só falar! :) Abraços, Marcelo Utikawa da Fonseca
-
Boa tarde! Existem alguns problemas na sua lógica. Primeiro, o fseek está incorreto. Ao usar o SEEK_SET, você define o deslocamento em bytes do começo do arquivo. Já no SEEK_CUR, o avanço é relativo à posição atual. Assim, no código abaixo: fseek(registro,1 * sizeof(reg.nome),SEEK_SET); fwrite(& reg.nome,sizeof(reg.nome),1,registro); fseek(registro,2,SEEK_CUR); fwrite(& reg.telefone,sizeof(reg.telefone),1,registro); Primeiro você avança o tamanho do campo nome. Mas como no início do arquivo não tinha nada gravado então ficou um espaço não utilizado. Além disso, você avança 2 bytes para gravar o telefone mas, quando você lê o telefone do arquivo, o avanço é de apenas 1 byte, fazendo com que o telefone seja lido de uma posição diferente daquela em que ele foi gravado. Outra coisa: para usar o scanf com a variável nome, use apenas assim: scanf("%s",reg.nome); ou então assim: scanf("%s",®.nome[0]); Aquele & não deve ser usado com o nome do vetor pois, quando ele não tem índice, o seu nome já aponta para seu conteúdo. Apenas use o & se tiver colocado o índice junto ao nome do vetor, como no segundo exemplo. O mesmo serve para o printf! Agora a solução: para gravar os dados de uma estrutura, o mais simples é gravar toda a estrutura. E não se preocupe com o fseek. Sempre que você realiza uma leitura ou escrita, o ponteiro já é deslocado então basta ler ou gravar o próximo dado. E no caso da função para cadastrar, apenas abra o arquivo para adicionar novos dados ao invés de uma gravação apenas. Assim você adiciona novos dados sem perder os que já foram gravados! Veja o seu código abaixo com as minhas modificações. A opção de cadastrar adiciona um novo registro e a função de listar exibe todos os que já foram gravados: #include <stdio.h> #include <stdlib.h> struct regis { char nome[20]; int telefone; }; int main(int argc, char *argv[]) { struct regis reg; int sa=0,cond; FILE *registro; while(sa==0) { printf("digite 1 para cadastrar 2 para visualizar e 3 para sair:\n"); scanf("%d",&cond); system("cls"); switch(cond) { case 1: registro=fopen("registro.txt","a+b"); printf("entre com seu nome:\n"); scanf("%s",reg.nome); printf("entre com o numero de telefone: \n"); scanf("%d", & reg.telefone); fwrite(& reg,sizeof(struct regis),1,registro); fclose(registro); printf("digite 3 para sair ou 0 para voltar ao menu: \n"); scanf("%d",&sa); system("cls"); break; case 2: registro=fopen("registro.txt","rb"); while(fread(& reg,sizeof(struct regis),1,registro) > 0) { printf("%s\n",reg.nome); printf("%d\n",reg.telefone); } fclose(registro); printf("digite 3 para sair ou 0 para voltar ao menu: \n"); scanf("%d",&sa); system("cls"); break; } } return 0; } Qualquer dúvida avise que eu explico! :) Abraços, Marcelo Utikawa da Fonseca
-
Pilhas, impressão sem destruila
pergunta respondeu ao robertorp de Marcelo Utikawa da Fonseca em C, C++
Olá! Pelo que pude ver, sua pilha está correta. A mensagem do compilador (apenas um aviso, não um erro) é por causa da inicialização do for na função de imprimir a lista. Lá está apenas n, mais nada. Você pode tirar esse n, deixando direto o ; O problema do programa está no if dentro do case 1 do switch. Lá você verifica se cont é maior que 1 mas cont foi inicializado com zero então a pilha nunca é criada. O correto seria: if(cont == 0) Abraços, Marcelo Utikawa da Fonseca