Ir para conteúdo
Fórum Script Brasil

Marcelo Utikawa da Fonseca

Membros
  • Total de itens

    297
  • Registro em

  • Última visita

Tudo que Marcelo Utikawa da Fonseca postou

  1. Olá! São dois os seus problemas: 1- Quando você não coloca o tamanho do vetor na sua declaração, a quantidade de itens usados na inicialização é que define o seu tamanho. Assim, as declarações abaixo: int A1[][2]={{1,0},{2,1},{3,2},{4,2},{5,3}}; int A3[][2]={{12,0},{13,1},{14,2},{15,2},{16,3}}; int Matriz_Temp[][2]={}; int A2[][2]={}; criam vetores com o seguinte tamanho: A1 e A3 tem 5 posições Matriz_Temp e A2 tem... ZERO posições!!! Defina um tamanho fixo para estes vetores. Exemplo: int A1[][2]={{1,0},{2,1},{3,2},{4,2},{5,3}}; int A3[][2]={{12,0},{13,1},{14,2},{15,2},{16,3}}; int Matriz_Temp[100][2]={}; int A2[100][2]={}; 2- Na sua lógica de cópia você avança apenas 3 posições: for (int i=0;i<5;i++) { for (int j=0;j<2;j++) { A2[i][j]=A3[i][j]; A2[i+3][j]=Matriz_Temp[i][j]; //Matriz A2 na posição i+3 = matriz tempórária? cout<<A2[i][j]<<" "; } cout<<endl; } Mas o correto é avançar 5 posições pois este é o número de elementos da primeira matriz: for (int i=0;i<5;i++) { for (int j=0;j<2;j++) { A2[i][j]=A3[i][j]; A2[i+5][j]=Matriz_Temp[i][j]; //Matriz A2 na posição i+3 = matriz tempórária? cout<<A2[i][j]<<" "; } cout<<endl; } Abraços, Marcelo Utikawa da Fonseca
  2. Ok. Então você recebe 6 bytes e os valores em hexadecimal são o que você me mostrou. Esses dados são do tipo char (1 byte) mas não são ASCII. Dessa forma você não pode usar nenhuma função de string para trabalhar com estes dados. Veja o programa de teste que eu fiz: você primeiro digita o número de elementos e depois digita o valor de cada elemento. Eu armazeno em um array de char e depois faço a comparação. Imagine que essa parte digitada é o valor que você recebeu e a comparação é o que você precisa fazer no seu caso. Diga se isso resolve seu problema! #include <stdio.h> #define MAX 100 int bincmp(char *buffer, int size) { int i; char teste[MAX] = { 0x10, 0xC9, 0x00, 0x2A, 0xF3, 0x16 }; for(i=0; i < size; i++) { if(buffer[i] != teste[i]) return 0; } return 1; } int main(void) { int size, i; char buffer[MAX]; printf("Quantidade de elementos: "); scanf("%d", &size); if(size > MAX) { printf("Maximo %d elementos!\n", MAX); size = MAX; } for(i=0; i<size; i++) { printf("Digite o valor do elemento %3d: ", i); scanf("%d", (int *)&buffer[i]); } printf("Valor OK ? %s\n", bincmp(buffer, size) ? "sim" : "não"); return 0; }
  3. Boa tarde a todos! Primeiro wrodrigounb: ninguém sabe tão pouco que não possa ensinar e ninguém sabe tanto que não possa aprender. Eu com certeza ainda preciso aprender muito! :) Christopher: Desculpe não responder antes, não consegui entrar ontem. Cara... amanhã pela manhã???? Realmente bem difícil! O que é esse cartas que você falou? É aquele meu exemplo do jogo paciência? Se for, pode usar ele. Aquela estrutura CardList é uma TAD com ponteiros. Abraços, Marcelo Utikawa da Fonseca
  4. Bom dia! Estou começando a entender agora... :) Eu não conhecia esse protocolo. Eu procurei sobre ele e não achei muita coisa. Primeiro: para monitorar uma porta de rede use o wireshark. Talvez até você esteja usando ele mas de qualquer forma fica a dica. :) Quanto ao problema em si, o que eu quis dizer sobre receber byte a byte é que o seu programa primeiro recebe um byte com o valor 10, depois outro com o valor c9 e assim por diante, correto? Você não recebe a string sendo primeiro o número 1, depois o número 0, depois o espaço... Eu não sei o que é esse memo mas de qualquer forma é aí que está o seu problema. Você não pode jogar em uma variável de texto os dados recebidos. Eles não são um texto! E se você está monitorando os dados e salvando nessa Memo->Text então você tem um código não é? Coloque o código aqui no fórum, mesmo que não seja inteiro, apenas para podermos discutir em cima de algo mais concreto. Abraços, Marcelo Utikawa da Fonseca
  5. Olá! Primeiro um comentário: na função listar, o arquivo deve ser aberto como "r" e não "w+". Deve ser erro do copiar e colar mas lembre de arrumar. :) Sobre o problema: você precisa listar apenas os de determinada letra ou tem que ordenar alfabeticamente pela primeira letra? Se for apenas exibir os que iniciam com determinada letra, carregue os dados do arquivo normalmente mas somente jogue na tela os que iniciarem com a letra que você quer. Se tiver que ordenar, carregue tudo em um vetor e faça um loop para cada letra, exibindo apenas os com a letra da vez a cada ciclo. Assim evita ter que ordenar o vetor, o que ia demorar mais... Abraços, Marcelo Utikawa da Fonseca
  6. Oi! Eu não entendi uma coisa: você recebe os dados byte a byte com os valores que você citou ou a string já formatada? Eu acho que você recebe byte a byte. Dessa forma você não pode compara como se fosse uma string. Tem que fazer a comparação byte a byte também! Me mande exemplos de dados, trechos de códigos... Assim fica mais fácil entender o problema e encontrar a solução. Abraços, Marcelo Utikawa da Fonseca
  7. Boa tarde! Nunca programou? Pelo que foi pedido não é algo tão simples... Por isso que eu sempre comento que resolver os exercícios para alguém não é ajudar mas sim atrapalhar! Acho que a sua bola de neve já cresceu bastante! Sinceramente eu não sei como te ajudar sem fazer para você... Você nunca programou nem na escola? Nunca compilou um programa? Vamos fazer o seguinte: eu posso até fazer para você mas eu quero que você consiga algumas coisas: 1- Instalar uma IDE em um computador. Procure por dev-c++ na internet e instale. 2- Eu faço uma parte, te explico o conceito e você vai fazer alguns ajustes no código e compilar aí. 3- Você vai me enviar de volta a saída da compilação e a saída do programa. Por favor, não interprete isso como um castigo, "vingança" ou arrogância... Eu só quero te dar um empurrãozinho e uma motivação para aprender algo. Por mais que você diga que isso não é necessário para a função que você escolheu, facilita a sua comunicação com programadores e até mesmo ajuda no raciocínio! :) Assim que você instalar a IDE, avise para que eu possa começar a te mandar os códigos. Abraços, Marcelo Utikawa da Fonseca
  8. Segue código que checa o vetor: i = 0; while(i < 8) { cin >> numeros[i]; // Checa se repete for (j = 0; j < i; j++){ if(numeros[i] == numeros[j]) { cout << "Voce já digitou esse numero. Digite um numero diferente: "; break; } } if(j == i) { // não repetiu if(numeros[i] < 1 || numeros[i] > 25) { cout << "Numero invalido. Digite novamente: "; } else { // numero entre 1 e 25 for (j = 0; j < 15; j++) { if(numeros[i] == ultsorteio[j]) break; } if(j < 15) { // Saiu no break, o numero esta no vetor! Numero valido. i++; // Avanca para o proximo numero } } } } Essa lógica lê um número, verifica se foi repetido, verifica se está entre 1 e 25 e depois checa se está no vetor do último sorteio. Substituia essa lógica pelo primeiro loop, onde está lendo os números do usuário. Não testei aqui pois vou ter que sair agora, veja se funciona para você! Qualquer coisa é só falar. Abraços, Marcelo Utikawa da Fonseca
  9. Olá! Claro, consigo te ajudar sim... Mas como você disse, posso ajudar... Não posso fazer tudo! :) Eu preciso que você faça algo para eu ir te mostrando onde está errado e o que precisa ser feito para corrigir. Se eu fizer para você não estaria te ajudando mas sim te atrapalhando! Veja que você está reconhecendo que não sabe programar. É como uma bola de neve: se não segurar no começo ela vai ficando grande e uma hora não tem mais o que fazer! Tente aprender enquanto há tempo! ;) Abraços, Marcelo Utikawa da Fonseca
  10. Boa tarde! Primeiro, o tópico está no lugar correto sim. Só as tags de código que não... :D Para colocar as tags de código use: (code) Seu Código (/code) Apenas substituia os parênteses por colchetes. Sobre o código: Eu não sei se pode ser usado um vetor mas seria bem melhor e mais simples. Bastaria usar o índice do loop como índice do vetor e os valores seriam armazenados de forma independente, apesar de a variável ser a mesma... Considerando que tem que ser variáveis diferentes mesmo, o código deveria ser assim: #include <time.h> #include <stdio.h> #include <stdlib.h> int main(void) { int NumAleatorio, a, b, c, semente = time(&seg)%100; /*inicializar o gerador de números aleatórios com a semente*/ /*já está fazendo de 1 a 100 - o +1 é pra fazer de 1 a 100 e não de 0 a 99*/ srand(semente); for(i=0; i<3; i++) { numAleatorio = rand() % 100+1; printf("numero aleatorio entre 0 e 19 = %d \n", numAleatorio); switch(i) { // Checa qual variavel deve ser carregada case 0: a = NumAleatorio; break; case 1: b = NumAleatorio; break; case 2: c = NumAleatorio; break; } } return 0; } Veja que a geração da semente e a inicialização dos números aleatórios (srand) ficaram de fora do loop pois isso precisa ser feito apenas uma vez. Entendeu a lógica? Era isso que você precisava? Abraços, Marcelo Utikawa da Fonseca
  11. Veja o tópico sobre o jogo paciência. O código do baralho usa o conceito de TAD para as listas de cartas. Lá tem as funções de inserir e remover. Se tiver dúvidas é só falar que eu explico! Abraços, Marcelo Utikawa da Fonseca
  12. Você que fez este programa? Qual sua dúvida? Onde você não consegue alterar? Abraços, Marcelo Utikawa da Fonseca
  13. O problema é que o objeto Process não foi definido. Ou faltou algum header ou você não tem esse objeto nas suas libs. E pelo outro erro pode estar faltando um fechamento de chaves ou está relacionado à falta de declaração do Process. Duas coisas: tente usar a função que falei e poste o código aqui para que o pessoal possa ver e encontrar os erros. Abraços, Marcelo Utikawa da Fonseca
  14. Boa noite a todos! Realmente Pedro, não precisaria de condicional dessa forma. Se converter tudo para segundos, somar 1 e depois ir dividindo para voltar a hora, minuto e segundo não tem condicional. Sobre o formato de data, vou explicar: essa forma de representar datas é utilizado quando você quer ordenar eventos, por exemplo. Escrevendo a data em ano, mês e dia ao invés do contrário cria-se um número crescente. Para fazer um teste, faca o seguinte: Crie três arquivos em uma pasta qualquer no seu computador. Os nomes dos arquivos devem ser as seguintes datas: 20 de Janeiro de 2012, 14 de agosto de 2012 e 17 de maio de 2013. Primeiro use como nome as datas em dia, mês e ano: 20012012, 14082012 e 17052013. Agora ordene por nome e veja o que acontece: qualquer forma que ordene, crescente ou decrescente, a data de 2013 sempre vai ficar no meio. Você não consegue ordenar de forma que a data mais recente apareça primeiro, fica embaralhado. Agora mude o nome para ano, mês e dia: 20120120, 20120814 e 20130517. Veja que agora, ao ordenar por nome, as datas ficam em ordem crescente ou decrescente, como você preferir... :) Abraços, Marcelo Utikawa da Fonseca
  15. Olá! Agora não estou em um pc então não vou poder te ajudar quanto a um código de exemplo. Mas o cálculo da matriz complementar é basicamente a cópia dos elementos de uma matriz para outra, apenas eliminando a linha e coluna do elemento em questão. Assim faça inicialmente um código de cópia de duas matrizes. Em seguida adicione uma lógica que não permita a cópia. Coloque aqui o que conseguir! Abraços, Marcelo Utikawa da Fonseca
  16. Olá! Pelo que entendi você quer executar um programa quando o usuário clicar em um botão na tela, correto? Eu não entendi a parte sobre os erros e que algo foi mudado. É algum código que você já fez? Se sim, mande o código para entendermos melhor o seu problema... Se estiver usando o windows, você pude usar o ShellExecute: http://msdn.microsoft.com/en-us/library/wi...3(v=vs.85).aspx Abraços, Marcelo Utikawa da Fonseca
  17. Oi! Realmente o problema está naquela linha. Veja que na linha acima você checa se o nó é nulo. Se é nulo, você entra no laço da linha indicada. A linha indicada acessa a função Set_chave deste elemento, ou seja, acessa um ponteiro nulo. Antes da linha indicada você precisa criar o novo elemento. Isso é feito adicionando-se a linha a seguir: no[num_elem] = new Key; Abraços, Marcelo Utikawa da Fonseca
  18. Olá! Sim, pode usar tranquilo... Inclusive o Pedro Cunha usa esta IDE, talvez configurações e outras coisas mais específicas ele pode até ajudar mais. Eu pessoalmente nunca usei mas é boa sim! Como sempre, qualquer dúvida é só falar! Abraços, Marcelo Utikawa da Fonseca
  19. Desculpe. Não sei se você viu mas isso é contra as regras do fórum! Além disso, você vai pagar para alguém trabalhar para você quando estiver empregado e te pedirem algo? Pense um pouco nisso... Abraços, Marcelo Utikawa da Fonseca
  20. Realmente deve ser utilizado o -> para ponteiros. Mas nesse caso existe o índice (os colchetes com o x). Nessa situação não se usa o -> pois o índice funcionaria como o *: stante livro[10], *plivro; plivro = livro; plivro.codigo = 0; // ERRADO plivro->codigo = 0; // CORRETO (*plivro)->codigo = 0; // ERRADO (*plivro).codigo = 0; // CORRETO plivro[0]->codigo = 0; // ERRADO plivro[0].codigo = 0; // CORRETO Com relação ao restante que eu falei, funcionou? Abraços, Marcelo Utikawa da Fonseca
  21. Oi! O problema é que você está criando o botão e o edit dentro da winproc. Depois você dá apenas um hide na janela se clicar no fechar. Quando manda abrir a janela de novo, você cria os controles novamente! Assim fica um controle por cima do outro. Eo EditNum1 passa a apontar para o novo mas o que você digita o texto é o antigo! Mova a criação dos objetos para o main direto como eu fiz aqui: #include <windows.h> #include <string> #include <fstream> #include <iostream> #include <stdlib.h> #include <stdio.h> #include <sstream> #define className "Class" LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM WParam,LPARAM LParam); HINSTANCE g_inst; // Interagindo com o usuário HWND Botao1; HWND hwnd; HWND Botao2; HWND EditNum1; HWND option; HFONT Minhaletra; HWND BotaoFechar; // Identificando os Botões #define ID_BOTAO1 1001 #define IDC_BOTAO2 1003 #define IDC_BOTAOFECHAR 1004 // Sistema char frase[100]="0"; using namespace std; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine,int nCmdShow){ WNDCLASSEX win; MSG message; win.cbClsExtra = 0; win.cbSize=sizeof(win); win.cbWndExtra = 0; win.hbrBackground = CreateSolidBrush(RGB(217,83,83)); win.hCursor = LoadCursor(NULL,IDC_ARROW); win.hIcon = LoadIcon(NULL,IDI_WARNING); win.hIconSm = LoadIcon(NULL,IDI_WINLOGO); win.hInstance = hPrevInstance; win.lpfnWndProc = WinProc; win.lpszClassName = className; win.lpszMenuName = NULL; win.style = 0; if(!RegisterClassEx(&win)) return 0; hwnd = CreateWindowEx(0,className,"Formulário",WS_SIZEBOX | WS_TILED | WS_CAPTION | WS_SYSMENU, 300,200,700,430,NULL,NULL,hInstance,NULL); option = CreateWindowEx(0,className,"a",WS_SIZEBOX | WS_TILED | WS_CAPTION, 450,350,350,200,0,0,hInstance,0); EditNum1= CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",WS_VISIBLE|WS_CHILD,12,142,320,20,option,NULL,hInstance,NULL); Botao2 = CreateWindowEx(WS_EX_STATICEDGE,"BUTTON","Gravar",WS_VISIBLE | WS_CHILD,200,12,75,20,option,(HMENU)IDC_BOTAO2,hInstance,NULL); BotaoFechar = CreateWindowEx(WS_EX_STATICEDGE,"BUTTON","FECHAR",WS_VISIBLE | WS_CHILD,100,12,75,20,option,(HMENU)IDC_BOTAOFECHAR,hInstance,NULL); if(hwnd == NULL) return 0; ShowWindow(hwnd,SW_SHOW); UpdateWindow(hwnd); while(GetMessage(&message,0,0,0)){ TranslateMessage(&message); DispatchMessage(&message); } return message.wParam; } LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam) { switch(msg){ case WM_CREATE: Botao1 = CreateWindowEx(WS_EX_STATICEDGE,"BUTTON","Inverter",WS_VISIBLE | WS_CHILD,300,12,75,20,hwnd,(HMENU)ID_BOTAO1,g_inst,NULL); break; case WM_CLOSE: DestroyWindow(window); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: switch(LOWORD(wParam)){ case ID_BOTAO1:{ // MessageBox(NULL,frase,frase,MB_OK); ShowWindow(option, SW_SHOW); } break; case IDC_BOTAOFECHAR: { ShowWindow(option, SW_HIDE); } break; case IDC_BOTAO2: { SendMessage((HWND)EditNum1,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &frase); // sprintf(frase,"[basico]\nplayername =%s\ndirpath =%s\nrompath =%s",); ofstream myfile; myfile.open ("xsnes.ini"); myfile << frase; myfile.close(); MessageBox(NULL,frase,frase,MB_OK); // sprintf(frase,"."); // ShowWindow(option, SW_HIDE); } break; } break; default: return DefWindowProc(window, msg, wParam, lParam); } return 0; } Abraços, Marcelo Utikawa da Fonseca
  22. Boa tarde! Assumindo que você já abriu e configurou corretamente a porta e está recebendo os dados, basta comparar as strings como se tivesse recebido de qualquer outro lugar, como o próprio console. Apenas aumente o tamanho do seu buffer de recepção pois, nesse caso, se receber 1 caracter a mais já vai estourar... Note que os dados podem ainda estar sendo enviados. Nesse caso você deve continuar chamando a função de leitura até receber todo o comando. Mas como eu não conheço essa função que você está usando, não sei como você faria nesse caso. Considerando que a função retorne o número de bytes lidos, tente algo como abaixo: char Str[1024]; x=0; while(x<8) { x += ComPort1->ReadStr(&Str[x], Count); } if(!strncmp(Str, "123TESTE", 8)) { shell("cmd"); } É isso mesmo? Abraços, Marcelo Utikawa da Fonseca
  23. Olá! Aqui funcionou... :huh: O que vi que está errado é na função incluir. Você está atribuindo o último livro ao anterior do novo. Para fazer isso você não deve usar o operador & pois ptUltimo já é um ponteiro. O correto seria: novoLivro.ptAntLivro = ptUltimo; Abraços, Marcelo Utikawa da Fonseca
  24. Boa tarde! Seguem minhas considerações: 1) Dentro do for na função de ordenar você está declarando list *p. Mas ele já havia sido declarado no início da função! Use apenas "p=L" no for. 2) Não precisa carregar o zero no final dos vetores já que você não vai exibir a string em um printf, por exemplo. 3) O loop para criação da nova lista ordenada está com os contadores incorretos. Apenas crie uma nova variável e incremente-a até i ou j. 4) Sempre que usar o scanf podem sobrar caracteres não utilizados no buffer como a quebra de linha. O fflush(stdin) é errado e não deve ser usado! Uma forma simples de descartar o \n é como a seguir: scanf("%d", &valor); // O \n fica no buffer scanf("%d%*c", &valor); // um caracter após o final é lido e descartado. \n é removido! Use desta forma 5) O loop que carrega os caracteres pede 1 a mais do que deveria. O correto é usar o operador "<" e não "<=" na comparação 6) Lembre-se sempre de adicionar uma quebra de linha após exibir um texto. A saída da função imprime não tem a quebra e embaralha com a mensagem do comando "pause" (que por sinal dá erro aqui pois uso o linux, evite usar a função system!) Segue abaixo o código completo já funcionando: #include<stdio.h> #include<stdlib.h> #include<math.h> #include<ctype.h> /*estabelecendo estrutura para receber um caractere*/ struct lista { char caractere; struct lista *prox; }; typedef struct lista list; /*função para inserir uma nova estrutura na lista*/ list *insere(list *L,char c) { list*novo=(list*) malloc(sizeof(list)); novo-> caractere = c; novo-> prox = L; return novo; } /*função para fazer a ordenação de caracteres utilizando um vetor*/ list *ordenar(list *L) { list *p; int cont_dig, cont_caract, cont; int i=0,j=0; for(p= L; p!=NULL; p= p->prox) { if(isdigit(p->caractere)) cont_dig++; else cont_caract++; } char *vetor=(char*) malloc(cont_dig*sizeof(char)); /*Alocando espaço na memoria para o vetor de digitos*/ char *vetor2=(char*) malloc(cont_caract*sizeof(char)); /*Alocando espaço na memoria para vetor de caracteres*/ for(p= L; p!=NULL;p= p->prox) { if(isdigit(p->caractere)) { vetor[i]= p->caractere; i++; } else { vetor2[j]= p->caractere; j++; } } list *organizado; organizado = NULL; for(cont=0;cont<i; cont++) { organizado=insere(organizado,vetor[cont]); } for(cont=0;cont<j; cont++) { organizado=insere(organizado,vetor2[cont]); } return organizado; } /*função para imprimir*/ void imprime(list *L) { list *p = L; while(p!= NULL) { printf("%c",p->caractere); p= p->prox; } } main() { char caractere_user; int i,numero_caract; list*L; L=NULL; printf("Digite o numero de caracteres que voce deseja ordenar\n"); scanf("%d%*c", &numero_caract); for(i=0;i<numero_caract;i++) { printf("Digite um caractere\n"); scanf("%c%*c", &caractere_user); fflush(stdin); L=insere(L , caractere_user); fflush(stdin); } L= ordenar(L); imprime(L); printf("\n"); system("pause"); } Abraços, Marcelo Utikawa da Fonseca
  25. Olá! Existem alguns problemas no seu código: 1) Se você tem a definição MAX, use-a também no for de inicialização. 2) Os índices dois vetores em C começam em zero. Assim tanto na inicialização quanto ao receber os dados, inicie x com zero. Deve ficar assim: for(x=0;x<MAX;x++) { livro[x]->codigo = -1; } printf("Nesta opção você ira incluir os livors em sua biblioteca.\n"); x=0; 3) A função cadastro deve receber apenas um ponteiro para a estrutura e não um vetor de ponteiros.Aqui está o seu grande problema no código. Mude a função para: void cadastro(stante *livro) Você deve chamar a função assim: cadastro(livro); E acessar os membros com o operador ponto: livro[x].codigo = -1; 4) Evite usar variáveis globais e dê nomes mais explicativos às variáveis. Será mais fácil de entender e manter o código... :) Abraços, Marcelo Utikawa da Fonseca
×
×
  • Criar Novo...