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. Oi! Agora que vi sua pergunta, desculpe não responder antes! Aqui está um código de exemplo para o windows: #include <windows.h> #include <stdio.h> #include <tchar.h> void _tmain( int argc, TCHAR *argv[] ) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); if( argc != 2 ) { printf("Usage: %s [cmdline]\n", argv[0]); return; } // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) argv[1], // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure ) { printf( "CreateProcess failed (%d).\n", GetLastError() ); return; } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } Acho que não é o seu caso mas como outros podem ter a mesma dúvida, deixo aqui a resposta para o Linux: #include <stdio.h> #include <unistd.h> #include <sys/wait.h> int main() { int status; if(fork()) { printf("Esperando o filho...\n"); wait(&status); printf("Filho terminado!\n"); } else { execl("/bin/ls", "/", NULL); } return 0; }
  2. O problema é que você declarou a função para receber 3 inteiros. Já para chamar a função você não passou parâmetro nenhum! Como a função lê os valores internamente, acredito que a sua intenção é que ela não receba nada. Assim substitua a linha: int primfuncao(int a,int b,int c){ Por: int primfuncao(){ int a, b, c;
  3. Oi de novo! :) Você usou o for corretamente. O problema é que você imprime apenas um * e já quebra a linha. Você deveria colocar o *, os espaços internos do quadrado e então o outro *. Se eu fosse desenvolver esse programa teria feito uma função que imprimisse cada linha do quadrado, com um parâmetro informando se é borda (imprime somente *) ou não (imprime com espaços). Dessa forma seu programa ficaria assim: #include <iostream> using namespace std; void imprime_linha (int tamanho, int borda) { char ch = borda ? '*' : ' '; cout << "*"; while(tamanho-- > 2) { cout << ch; } cout << "*" << endl; } int main() { int entrada, i; do { cout<<"Digite o tamanho do quadrado (2 ate 20), zero para terminar: "; cin>>entrada; cin.ignore(); if(entrada >=2 && entrada <=20) { imprime_linha(entrada, 1); for(i=0; i<entrada-2; i++) imprime_linha(entrada, 0); imprime_linha(entrada, 1); } else if(tamanho) { cout << "\nTamanho do quadrado invalido! pressione qualquer tecla para tentar novamente..."; } } while(entrada); getchar(); return 0; } Não testei esse código mas acho que não tem nada errado. Qualquer coisa avise! :)
  4. Olá! Aqui também funcionou. O seu maior problema (e que ainda existe na resposta acima) é que após criar o login você deveria encerrar a string escrevendo o nulo do final. Além disso, a lógica onde se gera a senha poderia ser bastante simplificada. Veja abaixo o código que funcionou para mim. Como rodei no linux, eu fiz as funções strupr e strlow que não existiam. Você deve ter que tirar elas para compilar aí! #include <stdio.h> #include <string.h> void strupr(char *str) { while(*str) { if(*str >= 'a' && *str <= 'z') *str = *str - 'a' + 'A'; str++; } } void strlwr(char *str) { while(*str) { if(*str >= 'A' && *str <= 'Z') *str = *str - 'A' + 'a'; str++; } } int main() { char frase[150],login[20],senha[20]; int tam_fras,cont=0,j=0,i; printf("\nColoque seu nome completo: "); gets(frase); tam_fras=strlen(frase); strupr(frase); while(cont<2) { i=0; while(i<tam_fras) { if(i==0&&frase[i]!=' ') { login[j]=frase[i]; j++; } else { if(frase[i]==' '&&frase[i+1]!=' ') { if((i+1)<tam_fras) { login[j]=frase[i+1]; j++; } } } i++; } strlwr(frase); cont++; } i=0; login[j] = ''; senha[0] = ''; while(i<j) { sprintf(senha, "%s%d", senha, login[i]); i++; } printf("\n\nO nome completo: %s,\nO login: %s\nA senha: %s\n",frase,login,senha); return 0; } Mais uma coisa: essa idéia de gerar o login a partir das iniciais me fez lembrar disso aqui: http://vidadesuporte.com.br/suporte-a-seri...to-da-semana-2/ Abraços, Marcelo Utikawa da Fonseca
  5. Olá! O operador % retorna o resto da divisão. Exemplo: 5 % 2 retorna 1. No seu caso, quando o resto da divisão for diferente de zero, a condição será verdadeira. Se o resto for zero, será falso.
  6. Olá a todos! Eu fiz esse programa para poder mostrar alguns conceitos como: Lista Ligada, Ponteiros para Funções e Número Variável de Argumentos. É um programa simples e que pode ser expandido facilmente. Qualquer dúvida é só responder a esse tópico que eu explico! O objetivo desse programa foi criar um interpretador de comandos em um arquivo .txt. Você chama o programa passando como parâmetro um arquivo que será interpretado. O formado do arquivo é: COMANDO P1 P2 P3 ... Pn Sendo P1 a Pn os parâmetros para o comando. O programa foi desenvolvido em dois arquivos: interpretador.c e main.c. Eu fiz dessa forma para que o interpretador fosse independente do programa principal, podendo ser usado em outros programas sem necessidade de se altérá-lo. O main.c usa as funções criadas no interpretador.c para interpretar o arquivo. Existe ainda o arquivo interpretador.h que contém as definições necessárias para usar o arquivo interpretador.c. Lá existe a definição das estruturas e as funções que existem em interpretador.c Segue agora a listagem dos arquivos que citei: interpretador.h: #ifndef INTERPRETADOR_H #define INTERPRETADOR_H // Tipos de parametros suportados #define IC_TYPE_NULL 0 #define IC_TYPE_INT 1 #define IC_TYPE_FLOAT 2 #define IC_TYPE_CHAR 3 #define IC_TYPE_STRING 4 #define IC_TYPE_FULLSTRING 5 // Tipos de retorno dos handlers #define IC_RETURN_ERR -1 #define IC_RETURN_OK 0 #define IC_RETURN_NEXT 1 // Macros para criar Handlers #define IC_HANDLER(fnc) int fnc (IntCodeList *pList, ParamList *pParamList) #define IC_HANDLER_PTR(fnc) int (*fnc)(IntCodeList *pList, ParamList *pParamList) // Configuracoes #define IC_CONFIG_INTCODE_SIZE 20 #define IC_CONFIG_BUF_SIZE 1024 // Typedefs typedef struct strParamList ParamList; typedef struct strIntCode IntCode; typedef struct strIntCodeList IntCodeList; // Estrutura que define um parametro e ponteiro para lista ligada struct strParamList { union { int iInt; float fFloat; char cChar; char szString[IC_CONFIG_BUF_SIZE]; void *pAny; } Value; int iType; struct strParamList *pNext; }; // Estrutura que contem lista de parametros, handler e codigo associado struct strIntCode { char szCode[IC_CONFIG_INTCODE_SIZE+1]; IC_HANDLER_PTR(pHandler); ParamList *pParamList; }; // Estrutura base que contem a lista de todos os interpretadores adicionados struct strIntCodeList { IntCode IC; struct strIntCodeList *pNext; }; // Funcoes para trabalhar com os interpretadores void AddIntCode (IntCodeList *pList, char *szCode, IC_HANDLER_PTR(pHandler), ...); int ExecuteFile (IntCodeList *pList, char *szFile); IntCodeList *CreateIntCodeList(void); #endif interpretador.c: #include <stdarg.h> #include <string.h> #include <malloc.h> #include "interpretador.h" /*** Handlers Pre-Definidos ***/ IC_HANDLER(ICHandlerInclude) { // Executa o arquivo passado como parametro return ExecuteFile(pList, pParamList->Value.szString); } /*** Fim dos Handlers ***/ // Funcao para alocar uma variavel do tipo IntCodeList static IntCodeList *AllocIntCodeList(void) { IntCodeList *pNewList = (IntCodeList *)malloc(sizeof(IntCodeList)); memset(pNewList, 0, sizeof(IntCodeList)); return pNewList; } // Funcao que cria uma IntCodeList, adiciona os handlers padrão e retorna esta lista criada. IntCodeList *CreateIntCodeList(void) { IntCodeList *pList = AllocIntCodeList(); AddIntCode(pList, "INCLUDE", ICHandlerInclude, IC_TYPE_FULLSTRING, IC_TYPE_NULL); return pList; } // Funcao para adicionar um novo handler para determinado codigo. // Podem ser adicionados qualquer numero de handlers para cada codigo void AddIntCode(IntCodeList *pList, char *szCode, IC_HANDLER_PTR(pHandler), ...) { int iType; va_list args; IntCode *pNewIC; ParamList *pNewParamList, *pNextParamList; if(pList == NULL) return; if(pList->IC.szCode == NULL) { // Primeiro IntCode pNewIC = &(pList->IC); } else { // já existe o primeiro, alocar um novo // Primeiro procura o final da lista while(pList->pNext != NULL) { pList = pList->pNext; } // Aloca um novo IntCodeList e associa seu IC para pNewIC pList->pNext = AllocIntCodeList(); pNewIC = &(pList->pNext->IC); } // Carrega o campo code e handler do IntCode strncpy(pNewIC->szCode, szCode, IC_CONFIG_INTCODE_SIZE); pNewIC->szCode[IC_CONFIG_INTCODE_SIZE] = 0; pNewIC->pHandler = pHandler; // Inicia loop para montar lista de parametros, terminando em IC_TYPE_NULL va_start(args, pHandler); while((iType = va_arg(args, int)) != IC_TYPE_NULL) { // Aloca novo parametro e carrega tipo de variavel pNewParamList = (ParamList *)malloc(sizeof(ParamList)); memset(pNewParamList, 0, sizeof(ParamList)); pNewParamList->iType = iType; // Associa novo parametro a lista de parametros do IntCode if(pNewIC->pParamList == NULL) { pNewIC->pParamList = pNewParamList; } else { pNextParamList->pNext = pNewParamList; } pNextParamList = pNewParamList; } } // Executa o arquivo passado como parametro, interpretando conforme a lista de IntCode passada como parametro int ExecuteFile(IntCodeList *pList, char *szFile) { FILE *pFile; IntCodeList *pCurrent; int iRet = IC_RETURN_ERR; char szCode[IC_CONFIG_INTCODE_SIZE+1], szFormatCode[10], *szFormatParam; char szLine[IC_CONFIG_BUF_SIZE], szParam[IC_CONFIG_BUF_SIZE]; // Verifica se a lista é valida if(pList == NULL || pList->IC.szCode == NULL) { return iRet; } if(szFile == NULL) { pFile = stdin; } else { // Abre o arquivo e retorna erro se não conseguir pFile = fopen(szFile, "r"); if(pFile == NULL) { return iRet; } } /*** Lista valida e arquivo aberto. Agora comecamos a interpretar os codigos! ***/ // Primeiro criamos a string de formato, limitando a leitura a IC_CONFIG_INTCODE_SIZE caracteres sprintf(szFormatCode, "%%%02ds", IC_CONFIG_INTCODE_SIZE); iRet = IC_RETURN_OK; // Enquanto não houver erro, le nova linha while(iRet != IC_RETURN_ERR && fgets(szLine, IC_CONFIG_BUF_SIZE, pFile) != NULL) { int iLineEnd; // Limpa o final da string lida for(iLineEnd = strlen(szLine)-1; iLineEnd >= 0; iLineEnd--) { switch(szLine[iLineEnd]) { case '\r': case '\n': case ' ': szLine[iLineEnd] = ''; default: // Terminou. Devemos interroper o loop iLineEnd = 0; } } // Agora carregamos o codigo da string if(sscanf(szLine, szFormatCode, szCode) == 1) { pCurrent = pList; iRet = IC_RETURN_OK; // Codigo lido corretamente. Inicia loop de busca dos handlers while(pCurrent != NULL) { if(!strcmp(pCurrent->IC.szCode, szCode)) { // handler encontrado! int iStart = strlen(szCode) + 1; ParamList *pParamList = pCurrent->IC.pParamList; // Loop para carregar os parametros da string while(pParamList != NULL) { switch(pParamList->iType) { case IC_TYPE_INT : szFormatParam = "%d"; break; case IC_TYPE_FLOAT : szFormatParam = "%f"; break; case IC_TYPE_CHAR : szFormatParam = "%c"; break; case IC_TYPE_STRING : szFormatParam = "%s"; break; default: case IC_TYPE_FULLSTRING: szFormatParam = NULL; break; } // Carrega parametro conforme formato definido if(szFormatParam == NULL) { strcpy(pParamList->Value.szString, szLine+iStart); break; } else { // Primeiro carrega sem formato, avancando na string sscanf(szLine + iStart, "%s", szParam); iStart += strlen(szParam)+1; // Converte conforme formato especificado sscanf(szParam, szFormatParam, &pParamList->Value); pParamList = pParamList->pNext; } } // Executa o handler e checa o retorno iRet = (pCurrent->IC.pHandler)(pList, pCurrent->IC.pParamList); if(iRet == IC_RETURN_OK) { // OK, interromper busca por novos handlers para linha atual. break; } else if(iRet != IC_RETURN_NEXT) { // Erro! Interromper execucao. iRet = IC_RETURN_ERR; break; } } // Avanca para o proximo item na lista pCurrent = pCurrent->pNext; } } } // Terminou. Fecha o arquivo e retorna. fclose(pFile); return iRet; } main.c: #include <stdio.h> #include "interpretador.h" // Handler que trabalha com o codigo PESSOA IC_HANDLER(hPessoa) { char *szNome; float fAltura; int iPeso, iIdade; // Carregamento dos parametros recebidos szNome = pParamList->Value.szString; pParamList = pParamList->pNext; fAltura = pParamList->Value.fFloat; pParamList = pParamList->pNext; iPeso = pParamList->Value.iInt; pParamList = pParamList->pNext; iIdade = pParamList->Value.iInt; // Exibe os dados recebidos na tela printf("%s tem %.02f m, %d Kg e %d anos.\n", szNome, fAltura, iPeso, iIdade); // Sempre retorna OK return IC_RETURN_OK; } int main(int argc, char **argv) { IntCodeList *pList; // Checa se foram passados os parametros corretamente. if(argc > 2) { printf("Sintaxe:\n\t%s [arquivo]\nSe não fornecido o parametro arquivo, utiliza-se stdin\n", argv[0]); return 1; } // Cria a lista e adiciona um handler para PESSOA pList = CreateIntCodeList(); AddIntCode(pList, "PESSOA", hPessoa, IC_TYPE_STRING, IC_TYPE_FLOAT, IC_TYPE_INT, IC_TYPE_INT, IC_TYPE_NULL); // Interpreta o arquivo fornecido como parametro if(ExecuteFile(pList, argc==2 ? argv[1] : NULL) == IC_RETURN_ERR) { printf("Erro interpretando arquivo!\n"); return 2; } else { printf("Arquivo interpretado com sucesso!\n"); } // Fim do programa return 0; } Eu criei ainda um script para compilar já que são dois arquivos. O conceito é gerar o arquivo objeto do interpretador.c e depois compilar o main.c, agregando o arquivo objeto criado. compila.sh: #/bin/sh rm *.o interpretador 2>/dev/null gcc -Wall -c -o interpretador.o interpretador.c gcc -Wall -o interpretador main.c interpretador.o Abaixo estão dois arquivos para testar o programa. São dois pois no teste.txt eu uso um comando para incluir o arquivo maisum.txt teste.txt: INCLUDE maisum.txt PESSOA João 1.75 80 37 PESSOA Maria 1.68 56 35 maisum.txt: PESSOA Fulano 1.48 39 11 É isso. Vejam como o arquivo main.c é simples. Essa é a vantagem de separar o código em mais de um arquivo. Assim é possível reaproveitar a lógica facilmente! Mais uma vez, fiquem à vontade para perguntar... Comentários e críticas construtivas também serão muito bem vindos! B)
  7. Você não devia chamar o ping dessa forma. O correto seria fazer o seu programa enviar o ping diretamente e ler a resposta. Se você estiver programando para linux, o link a seguir contém justamente um programa em C que é o equivalente ao ping: http://www.winlab.rutgers.edu/~zhibinwu/html/c_prog.htm Se você está programando para windows, eu não sei exatamente como faz mas você vai precisar usar o winsock: http://msdn.microsoft.com/en-us/library/wi...v=vs.85%29.aspx Abraços, Marcelo Utikawa da Fonseca
  8. Você deve estar ultrapassando o limite de algum vetor. Mostre o código que causa esse problema para que seja possível identificar o problema. Abraços, Marcelo Utikawa da Fonseca
  9. Esse programa não era nem para compilar! No scanf você precisa passar como parâmetros a string com o formato e as variáveis onde os dados serão salvos. Assim, você deve corrigir: scanf("%d,&a); e scanf("%d,&b); para scanf("%d",&a); e scanf("%d",&b); Já no printf você deve passar como parâmetro a string de formato e depois as variáveis a exibir. No seu printf você dividiu a string de formato em duas e a variável voce passou com o &, que serve para receber o endereço de memória da variável. No printf você coloca apenas a variável pois temos que passar não o endereço mas o seu valor. Assim o correto seria: printf("o maior valor é: %d",c);
  10. Olá! Existem alguns problemas com sua lógica: 1) Um grande problema é com a declaração no seu vetor vertice. Você usa N*2 para definir o tamanho do vetor mas isso não dá certo! Um vetor é criado em tempo de compilação, ou seja, quando o compilador está criando o executável. Assim o tamanho do vetor ficará errado pois nesse momento não há valor em N. Para declarar o vetor ou você define um tamanho grande e controla para não estourar ou aloca memória diretamente, o que é mais complicado. Assim, para simplificar, apenas mude a declaração para: int vertice[100]; 2) Algumas linhas no seu código não estão fazendo nada e isso é o motivo para seu programa não responder nada. As linhas: i+2; c+1; e d+1; somentem calculam o valor mas não atribuem a nada! o correto seria: i=i+2; c=c+1; e d=d+1; 3) O correto seria você informar ao usuário o que ele deve fazer. Você não informa que deve ser digitada a quantidade de vértices nem os vértices em si. Fica difícil saber o que está acontecendo! Sempre exiba mensagens informando ao usuário o que ele tem que digitar antes de chamar o scanf. 4) Eu não lembro os cálculos de perímetro para poder te ajudar... Assim apenas rodei o programa aqui e vi que o resultado está estranho. Só revisar esse cálculo... :)
  11. Para intercalar as palavras você vai precisar fazer a busca de cada caracter de uma palavra na outra palavra, procurando assim pontos em que elas possam ser intercaladas. Normalmente eu não entrego código pronto mas como é uma lógica interessante resolvi fazer... :rolleyes: #include <stdio.h> struct ponto { int posH; // posicao horizontal int posV; // posicao vertical }; struct ponto BuscaCruzamento(char *stringH, char *stringV) { struct ponto p; // inicializo com valores invalidos for(p.posH = 0; stringH[p.posH]; p.posH++) { for(p.posV = 0; stringV[p.posV]; p.posV++) { if(stringH[p.posH] == stringV[p.posV]) { return p; // achou! retorna posicao atual } } } // se chegou aqui, não achou. Carrega posicao invalida p.posH = p.posV = -1; return p; } int main(int argc, char **argv) { struct ponto p; if(argc != 3) { printf("Sintaxe:\n\t%s <string horizontal> <string vertical>\n", argv[0]); return 1; } p = BuscaCruzamento(argv[1], argv[2]); if(p.posH < 0) { // invalido! printf("strings não cruzam!\n"); } else { printf("Cruzam em [%d:%d]\n", p.posH, p.posV); } return 0; } Esse programa tem uma função que recebe duas strings e retorna a posição em que elas se cruzam ou retorna -1 como coordenadas para indicar que não se cruzam. Compile esse programa e passe como parâmetro duas strings: a horizontal e a vertical. Será exibido na tela o ponto em que elas se cruzam. Abraços, Marcelo Utikawa da Fonseca
  12. Olá! Realmente está estranho esse enunciado. De qualquer forma eu seguiria à risca o que foi proposto, mesmo não fazendo tanto sentido assim. Veja que no enunciado existe uma fórmula: saldo inicial + debitos - credito. Isso não foi feito no seu programa. Você separou em débito e crédito. Eu imagino que nesse caso os débitos referem-se a valores pagos e créditos as compras efetuadas, como se fosse uma fatura de cartão de crédito. Vendo dessa forma, aquela fórmula inicial passaria a fazer sentido. Uma sugestão seria adicionar uma opção no programa para calcular da forma eu falei. Assim, se de uma forma não estiver certa, a outra vai estar! E seu programa vai calcular das duas formas... B) Outra coisa: não é muito comum ficar chamando o main dentro dele mesmo. O ideal é fazer um loop dentro do main ao invés de chamar ele de novo. Fazendo o loop, seu programa ficaria assim: #include <iomanip> #include <iostream> using namespace std; int main(){ int nconta,op; float nsaldo,ncredito,ndebito,nncredito; float nfsaldo=0,nfcredito=0; cout<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint|ios::left); do { cout<<"Digite o numero da conta: "; cin>>nconta; cout<<"Digite o seu saldo inicial: "; cin>>nsaldo; cout<<"Digite seu limite de credito: "; cin>>ncredito; cout<<"Digite os gastos em sua conta: "; cin>>ndebito; cout<<"Digite os gastos em seu cartao de credito: "; cin>>nncredito; cout<<"Digite (1) para calcular, (2) Para iniciar o calculo novamente, (9) Para sair\n"; cin>>op; switch (op){ case 1: nfsaldo=nsaldo-ndebito; nfcredito=ncredito-nncredito; cout<<"Conta: "<<nconta<<endl; cout<<"Saldo: "<<nfsaldo<<endl; cout<<"Limite de credito: "<<nfcredito<<endl; if (ncredito < nncredito) cout<<"Limite de credito excedido, voce esta devendo: "<<nfcredito<<endl; if (ndebito > nsaldo) cout<<"Limite em conta excedido, cheque especial!"<<endl; getchar(); break; case 2: // repetir, não faz nada case 9: // sair, o while vai terminar break; default: cout<<"Opcao invalida por favor tente novamente!\n"; system ("cls"); break; } } while(op != 9); getchar(); return(0); }
  13. Eu não me lembro de ter algum dia visto esse erro mas pesquisei sobre ele e vi que existem duas coisas que podem provocá-lo: 1) Conflito entre o VS2010SP1 e o VS2012RC. 2) incremental link Como você não parece ter o VS2012RC instalado, nos resta a segunda opção. Para desativar o incremental link, abra as configurações do projeto e vá em linker e mude a opção enable incremental linking para "no". Espero que resolva! :) Abraços, Marcelo Utikawa da Fonseca
  14. Olá! Ifstream serve apenas para leitura. Já ofstream apenas escrita. Para fazer o que você quer, use fstream pois ele serve para ambas operações. Para saber mais, veja esse link: http://www.cplusplus.com/doc/tutorial/files/ Se não conseguir avise! Abraços, Marcelo Utikawa da Fonseca
  15. O problema é que o scanf usa do buffer de entrada (teclado) apenas o que você pediu. Assim, quando colocamos "%d", ele vai ler apenas o número digitado. Porém nós digitamos o número e o enter no final. Isso quer dizer que sempre fica sobrando o enter no buffer de entrada. Quando o gets vai ler o nome, ele lê tudo até o primeiro enter. Mas como já tem o enter no buffer, ele acha que já terminou e sai antes de você digitar qualquer coisa. Para contornar este problema pode ser adicionado este código antes de gets ou scanf: fflush(stdin); Isso faz com que o buffer de entrada (standard input - stdin) seja descarregado, eliminando qualquer coisa que tenha ficado para trás. O problema é que tem plataformas que funcionam dessa forma (windows, por exemplo) e outras que não funcionam (como o linux). Outra forma é alterar todos os scanf para eliminar este último caracter. Para isso devemos ler ele também. O seu código deveria ser alterado de: scanf ("%d", &qtde); Para: scanf ("%d%*c", &qtde); Esse %*c no final vai fazer o scanf ler um caracter depois do número (no caso vai ler o enter, removendo-o do buffer). O * serve para avisar o scanf que esse valor é para ser descartado, não precisa salvar em nenhuma variável. Espero que isso já resolva seu problema! :) Abraços, Marcelo Utikawa da Fonseca
  16. Boa tarde! Eu vi que você usa outro ambiente mas, como eu não tenho ele aqui, não tinha como testar com ele. Assim eu mostrei os passos que eu usei para fazer funcionar no meu ambiente para que você pudesse fazer algo equivalente. B) O importante é que você conseguiu resolver! Abraços, Marcelo Utikawa da Fonseca
  17. O código que você passou funcionou aqui. Eu tenho o Visual Studio Professional 2010. Eu criei um novo projeto Win32 Console e escolhi para criar um projeto vazio. Em seguida eu criei um arquivo chamado main.cpp e colei o código que você passou. Precisei adicionar a psapi.lib nas dependências e pronto! Compilou e rodou aqui, exibindo o caminho dos processos em execução.
  18. Olá! O seu problema, conforme indicado pelo compilador, é com o argumento 1 passado para a função inicia. É informado que o tipo da variável passada como parâmetro é inválido. A sua função inicia foi declarada da seguinte forma: void inicia(pessoa *cadastro, int tamanho) Já a variável sendo passada como parâmetro foi declarada da seguinte forma: pessoa *cadastro = NULL; Perceba que tanto a variável como o primeiro argumento da função inicia possuem o mesmo tipo: pessoa * Ou seja: para chamar a função bastaria passar cadastro, sem o &. Esse é o motivo de erro na compilação. Quando você usa o &cadastro, você está dizendo: "endereço de cadastro", ou seja, um ponteiro. Isso faz o tipo da variável cadastro mudar de pessoa * para pessoa **, tornando incompatível com a função.
  19. Boa noite! Depois eu testo pois não estou no pc agora. Sobre o erro com QueryFullProcessImageName, provavelmente é porque executável está sendo compilado para o xp. Existe uma forma de criar um arquivo que indica a versão correta do windows para o qual o programa deve ser compilado chamado de manifesto. Procure sobre isso no code::blocks, deve ter algo lá. Ou pelo menos inclua um define assim: #define _WIN32_WINNT 0x600 Esse define deve ser colocado antes de incluir o windows.h. Veja também esse link, deve te ajudar! :) http://msdn.microsoft.com/en-us/library/wi...9(v=vs.85).aspx
  20. o EOF é declarado no cstdio, por isso da inclusão desse header. Aqui termina quando se pressiona CTRL+D...
  21. Tem um problema nesse código. Inclua o cstdio que o problema será resolvido: #include <cstdio>
  22. Olá! Como a dúvida é basicamente com os algoritmos de ordenamento, eu desenvolveria todo o restante do programa. Criaria os vetores, o loop para carregamento deles com valores aleatórios e exibiria o menu com opções de ordenar os dados por determinado algoritmo. Quanto aos pontos em negrito: A) Para armazenar em memória, eu imagino que ele queira dizer para manter uma cópia do vetor original para realizar as novas operações. Assim você precisa criar dois vetores iguais, carregar um e então fazer uma cópia dos dados para o segundo vetor. Utilize memcpy. B) Pesquise sobre os algortimos no google, por exemplo. Veja o que eu achei para o Heap Sort (com código!): http://pt.wikipedia.org/wiki/Heapsort. Com certeza você vai encontrar para os outros também. C) Para o item 4, chame os algoritmos passando como argumento o vetor original. Para medir o tempo, utilize a função time. D) Para o item 5, basta um loop até o final do vetor ou ao encontrar o dado procurado. Novamente, utilize a função time Tente desenvolver o programa seguindo as orientações e envie as dúvidas que forem surgindo! :-) Abraços, Marcelo Utikawa da Fonseca
  23. Ok, sem problema. Realmente não foi minha intenção ser mal educado. Mas como se diz com relação a comunicação interpessoal: não importa o que você quis dizer mas sim o que as pessoas entenderam. Sendo assim eu também estou errado... Portanto me desculpe também! ;) Precisando de algo mais é só perguntar!
  24. Boa noite! Antes de qualquer coisa: a linguagem c não é nenhum bicho de sete cabeças. Acho que de tanto falarem que é difícil, as pessoas já desistem logo nas primeiras tentativas, imaginando que nunca vão conseguir! Não caia nessa armadilha! ;) Sobre o seu problema: primeiro vou dar uma dica por cima... Conforme você for precisando de mais ajuda, eu vou passando... Mais ou menos como para pegar no tranco... :P Brincadeiras à parte, vamos ao que interessa. Eu desenvolveria esse programa da seguinte forma: 1) Seriam criadas as variáveis para armazenar o nome e a quantidade de vezes que cada opinião foi informada. 2) Criar loop que lê o nome, repetindo enquanto não for digitado um nome válido. 3) Ler número de respostas 4) Criar loop para leitura das respostas, incrementando as variáveis correspondentes 5) Exibir os resultados
  25. Bom dia! Como sempre você colocando códigos aqui... :) Quem sabe eu me anime e coloque alguma coisa também! :P Sobre o código ficou legal! Só tem uma coisa que eu queria comentar e que ia simplificar o código. Podem ser criadas estruturas com os dados do zodíaco: struct zodiaco { char *nome; int limite; }; No seu código você declara assim: struct zodiaco signos[] = { { "Capricórnio", 21 }, { "Aquário", 19 }, { "Peixes", 20 }, { "Áries", 20 }, { "Touro", 20 }, { "Gêmeos", 20 }, { "Câncer", 20 }, { "Leão", 20 }, { "Virgem", 20 }, { "Libra", 20 }, { "Escorpião", 20 }, { "Sagitário", 21 } }; Pode existir também uma estrutura para os meses: struct mes { char *nome; int dias; }; E os meses seriam declarados assim: struct mes meses[] = { { "Janeiro", 31 }, { "Fevereiro", 29 }, { "Março", 31 }, { "Abril", 30 }, { "Maio", 31 }, { "Junho", 30 }, { "Julho", 31 }, { "Agosto", 31 }, { "Setembro", 30 }, { "Outubro", 31 }, { "Novembro", 30 }, { "Dezembro", 31 }, }; Usando essas estruturas seu código seria muito mais simples. Veja o código da função Meses(): struct zodiaco { char *nome; int limite; }; struct mes { char *nome; int dias; }; void Meses(){ int mes, dia; struct zodiaco signos[] = { { "Capricórnio", 21 }, { "Aquário", 19 }, { "Peixes", 20 }, { "Áries", 20 }, { "Touro", 20 }, { "Gêmeos", 20 }, { "Câncer", 20 }, { "Leão", 20 }, { "Virgem", 20 }, { "Libra", 20 }, { "Escorpião", 20 }, { "Sagitário", 21 } }; struct mes meses[] = { { "Janeiro", 31 }, { "Fevereiro", 29 }, { "Março", 31 }, { "Abril", 30 }, { "Maio", 31 }, { "Junho", 30 }, { "Julho", 31 }, { "Agosto", 31 }, { "Setembro", 30 }, { "Outubro", 31 }, { "Novembro", 30 }, { "Dezembro", 31 }, }; do { system("cls");Janela6(); textcolor(LIGHTRED);gotoxy(28,7);cprintf("PROGRAMA SIGNOS DO ZODÍACO"); textcolor(LIGHTCYAN);gotoxy(14,9);printf("Digite o mês do seu Aniversário ou tecle 0 para sair: "); scanf("%d", &mes);fflush(stdin); if(mes == 0) { textcolor(LIGHTBLUE);gotoxy(30,15);printf ("O ROCCO AGRADECE");Sleep(1800);exit(0); } if(mes < 0 || mes > 12) { textcolor(LIGHTBLUE);gotoxy(20,11);printf ("\aNão existe este mês no ano"); Sleep(1800);Meses(); } } while(mes < 0 || mes > 12); mes--; textcolor(LIGHTBLUE);gotoxy(30,11);printf (meses[mes].nome);Sleep(800); textcolor(YELLOW);gotoxy(20,13);printf ("Agora digite a data do seu nascimento: ");Sleep(800); scanf("%d", &dia);fflush(stdin); if(dia > meses[mes].dias) { textcolor(LIGHTBLUE);gotoxy(30,15);printf ("Dia inválido!");Sleep(1800); } else { if(dia > signos[mes].limite) { mes++; if(mes == 12) mes = 0; } textcolor(LIGHTBLUE);gotoxy(30,15);printf ("SEU SIGNO É %s", signo[mes].nome);Sleep(1800); } }
×
×
  • Criar Novo...