
Wicker Man
Membros-
Total de itens
268 -
Registro em
-
Última visita
Tudo que Wicker Man postou
-
Como Faço Para Interagir Botao No C++ Builder 6 Com O Mysql
uma questão respondeu Wicker Man em C, C++
Opa! Cara, antes de tudo você deve baixar e instalar (se não já o fez) o MySQL Connector/ODBC no endereço http://dev.mysql.com/downloads/connector/odbc/3.51.html. Nessa página, baixe o arquivo descrito como "Windows MSI Installer (x86)". Depois de instalá-lo, vá em Painel de Controle -> Ferramentas Administrativas -> Fontes de Dados (ODBC). Na aba intitulada "Fontes de Dados de Usuário" clique no botão "Adicionar", escolha o driver "MySQL ODBC 3.51 Driver" e clique em "Concluir". Agora, na tela que aparecerá, no campo "Data Source Name" você coloca o nome da sua nova fonte de dados e o restante você coloca conforme as suas configurações/necessidades. Observe que só poderá escolher o seu banco de dados depois de fornecer valores válidos nos campos anteriores (além disso, observe se será necessário mudar alguma coisa na aba "Connect Options"). Clique em "OK" e pronto, a sua fonte de dados foi criada. Feito tudo isso, no C++ Builder adicione os seus três campos de texto, nomeando-os codigo, nome e endereco, e um botão chamado salvar. Adicione também um componente "Data Source" (cujo nome será DataSource1), contido na aba "Data Access", e um componente "Query" (cujo nome será Query1), contido na aba "BDE". Altere a propriedade DataSet do DataSource1 para Query1. Altere a propriedade DatabaseName escolhendo o nome da fonte de dados que você criou. Agora Clique duas vezes no botão para programar o método que será executado no seu evento OnClick. Ele deverá ficar assim: ... void __fastcall TForm1::salvarClick(TObject *Sender) { AnsiString myQuery; myQuery = "INSERT INTO teste( codigo, nome, endereco ) VALUES ( " + codigo->Text + ", '" + nome->Text + "', '" + endereco->Text + "' )"; Query1->SQL->Clear(); // Limpa queries, se houver alguma Query1->SQL->Add( myQuery ); // Adiciona uma query para ser executada Query1->ExecSQL(); // Executa query } ... Dê uma olhada na ajuda do C++ Builder para entender melhor como usar os componentes de banco de dados. Boa sorte! -
Opa! Cara, não há eros nesse código, mas sim há algumas confusões de tipos. Primeiro, a função CalculaDias deveria ter o seguinte protótipo (visto que você somente trabalhará com número inteiros): int CauculaDias( int, int, int, int, int, int ); E dentro dela, as variáveis devem ser declaradas como inteiras: ... int diasatual, diasdenascimento, diasdevida; ... Boa sorte!
-
Opa! Cara, ao passar um array multidimensional para uma função, você deve fornecer também os valores de todos os subscritos do array, exceto o primeiro (ou melhor, o primeiro não é obrigatório). Ou seja, na sua função criamatriz você deveria passar a variável mat da seguinte forma: void criamatriz( double mat[][ 6 ] ) O número 6 que coloquei acima é apenas um exemplo; você deverá substituir pelo valor correto da dimensão correspondente. Isso ocorre desta forma porque, dado que um array de qualquer dimensão é armazenado de forma seqüencial (um elemento após o outro) na memória, o compilador precisa dos outros subscritos para definir as posíções onde cada elemento deverá ser armazenado. Boa sorte!
-
Opa! Cara, o ponteiro de função membro da estrtura pam_conv deveria ter o protótipo igual ao da função my_conv, que você implementou, ou seja: int (*) ( int, const struct pam_message **, struct pam_response **, void * ); Mas aparentemente não é isso o que ocorre. Talvez o header pam_appl.h tenha uma implementação diferente nesse compilador. Então tente fazer as duas coisa seguintes: 1 - Adicione as seguintes linhas antes e depois da sua função my_conv: ... #ifdef _cplusplus extern "C" { #endif /* * * CÓDIGO DA SUA FUNÇÃO * */ #ifdef _cplusplus }; #endif ... 2 - Retire o const do segundo parâmetro da função my_conv. Sugiro isso me baseando na informação do erro, pois ele parace mostrar que o ponteiro de função membro da estrutura pam_conv deve ter o formato mostrado na mensagem, isto é: extern "C" int(*)(int,pam_message**,pam_response**,void*) Poste depois para dizer se funcionou. Boa sorte!
-
"expected Constructor, Destructor, Or Type Conversion Before Toke
pergunta respondeu ao Inufelipe de Wicker Man em C, C++
Opa! E aí, man? Beleza? Cara, você poderia postar o seu código e grifar nele a linha onde o erro ocorre? Boa sorte! -
Comunicação Do Pc Com Microcontrolador Via Rs232
pergunta respondeu ao Rodrigo Marques de Wicker Man em C, C++
Opa! Cara, a macro bioscom e a função _bios_serialcom fazem essas configurações no Turbo C. Estão na biblioteca "bios.h". Dê uma pesquisada em cima delas. Qualquer dúvida você posta aí. Veja esse link: http://electrosofts.com/serial/ Sobre o meu último post, eu só fiz mostrar como carregar a DLL com as funções de acesso às portas de comunicação e mostrar o protótipo dessas funções. Para entender melhor, visite esse tutorial (daqui do fórum mesmo): http://scriptbrasil.com.br/forum/index.php...mp;#entry445466. Boa sorte! -
Opa! Você está usando C ou C++? Em C você pode aproveitar as funções de manipulação de arquivos da biblioteca "stdio.h". Então você cria o arquivo com a extensão ".htm" ou ".html", e escreve no arquivo os comandos correspondentes à sua página de relatório. Veja o seguinte tutorial: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c900.html. Ainda tem a seguinte referência referência: http://www.cplusplus.com/reference/clibrary/cstdio/. Com C++ você pode usar a biblioteca "fstream". Veja um tutorial: http://www.cprogramming.com/tutorial/lesson10.html. Na referência: http://www.cplusplus.com/reference/iostream/fstream/. Boa sorte!
-
Comunicação Do Pc Com Microcontrolador Via Rs232
pergunta respondeu ao Rodrigo Marques de Wicker Man em C, C++
Opa! Existe uma DLL chamada "inpout.dll". Veja como usá-la: ... // Escopo global // Protótipo das funções de recebimento e envio de dados: typedef short _stdcall ( *inpfuncPtr )( short portaddr ); typedef void _stdcall ( *oupfuncPtr )( short portaddr, short datum ); ... Agora, para usar as funções de envio/recebimento de sinais: ... void main() { HINSTANCE hLib; inpfuncPtr in; oupfuncPtr out; hLib = LoadLibrary( "inpout.dll" ); in = ( inpfuncPtr )GetProcessAddress( hLib, "Inp32" ); // "Inp32": nome da função na DLL. out = ( inpfuncPtr )GetProcessAddress( hLib, "Out32" ); // "Out32": nome da função na DLL. // Utilizar as funções: ( in )( ENDER ); // ENDER -> endereço da porta. ( out )( ENDER, DADO ); // ENDER -> endereço da porta; DADO -> dado a ser enviado. ... } ... A DLL pode ser baixada no seguinte link: http://www.the-starbearer.de/Files/VB/INPOUT32.DLL. Veja um exemplo de código que usa essa DLL: http://www.sabereletronica.com.br/download...e_motor_passo.c. Boa sorte! -
Opa! Veja os seguintes sites: MFC (Visual C++): http://www.codersource.net/mfc_tutorial_Part1.html Win32: http://www.winprog.org/tutorial/ C++ Builder (VCL): http://www.programacionfacil.com/cpp_builder:start Boa sorte!
-
Opa! Cara, dê uma estudada em OpenGL. Veja esse link: http://www.unidev.com.br/artigos.asp?id=26...#39;OpenGL'. Veja isso também, sobre DirectX: http://www.unidev.com.br/download1.asp?top...%20DirectX'. Eu recomendo OpenGL. Boa sorte!
-
Como Excluir/alterar Chaves De Registro Do Windows
pergunta respondeu ao Dracom de Wicker Man em C, C++
Opa! E aí, man? Beleza? Para criar uma nova chave no registro você pode usar a função RegCreateKey da seguinte forma: ... HKEY hk; DWORD disp; RegCreateKeyEx( HKEY_LOCAL_MACHINE, // chave do registro onde a sua será criada "SYSTEM\\CurrentControlSet\\tesste", // caminho, no registro, da sua sub-chave 0, // mantenha assim NULL, // mantenha assim REG_OPTION_NON_VOLATILE, // a informação é mantida quando o sistema é reiniciado KEY_ALL_ACCESS, // define tipo de acesso (nesse caso total) NULL, // mantenha assim &hk, // armazena em "hk" um handle para a chave criada &disp // armazena em "disp" o tipo de operação realizada ); ... Se a sub-chave já existir, a função apenas abre essa chave (e armazena em disp o valor predefinido REG_OPENED_EXISTING_KEY). Caso contrário, cria a nova sub-chave (armazenando em disp o valor REG_CREATED_NEW_KEY). Para criar um novo valor dentro de uma chave pode-se usar a função RegSetValueEx. Por exemplo, digamos que queremos criar um valor na chave que acabamos de criar. A informação que queremos armazenar está na variável valor, que é uma string com terminador nulo. Então ficará assim: ... LPTSTR valor = "Opa!"; RegSetValueEx( hk, // nosso handler que foi inicializado em RegCreateKeyEx "ValorAdicionado", // nome do valor 0, // mantenha assim REG_SZ, // tipo de dados do registro correspondente a strings com terminador nulo ( LPBYTE )valor, // informação a ser armazenada, com coerção para o tipo LPBYTE ( lstrlen( valor ) + 1 ) * sizeof( TCHAR ) // tamanho dos dados ); ... Para deletar um valor: ... RegDeleteValue( hk, // nosso handler "ValorAdicionado" // nome do valor a ser deletado ); ... Para deletar uma chave: ... RegDeleteKey( HKEY_LOCAL_MACHINE, // chave onde está a nossa sub-chave "SYSTEM\\CurrentControlSet\\tesste", // caminho da sub-chave ); ... Para ter informações mais precisas, visite o seguinte link: http://msdn2.microsoft.com/en-us/library/ms724871.aspx. Há outros métodos mais "sofisticados" de acessar o registro também. Por exemplo, com a MFC: http://www.cst.nait.ab.ca/cst/staff/gkoesl...ed/Registry.htm. Ou com .NET: http://www.codeproject.com/dotnet/csregistry01.asp. Valeu, man! Boa sorte! -
Aqui ele rodou direitinho. Qual é a sua dúvida?
-
Opa! Cara, falta fechar a chave da função fbindec. Seria interessante se você postasse os erros que encontrou. Boa sorte!
-
Opa! Nas opções do projeto (Alt+P), clique em parâmetros e, na parte linker, digite a linha "-lmysql". Até mais!
-
Opa! Cara, diz aí quais são os erros que fica mais fácil. Por enquanto, posso te adiantar que você usa funções da biblioteca "string" mas não a inclui no programa. Sendo assim, você deve fazer o seguinte no topo do programa: #include <string.h> Você declara as funções "main" e "busAut" como "int" mas não retorna nada. A propósito, na função "busAut" você inicializa a variável inteira "ult" com 0, e quando chega no "for", você coloca a condição de continuação "i < aut", sendo que i também é 0; ou seja, o loop nunca será executado. Outra coisa, para passar arrays para as funções, você deve fazer da seguinte forma: ... int busAut( char plac[] ) { ... Quando você coloca algum número dentro dos colchetes é como se você estivesse passando um elemento de um array para a função, e não o array todo. Se isso não solucionar, diga aí os outros erros. Até mais!
-
Opa! Clique aqui. Até mais!
-
Opa! Desculpe, mas não entendi direito a sua pergunta. Quer saber o tipo de retorno da função "clock"? Caso seja isso, o tipo é "clock_t" (que equivale a um "long"). Observe a linha que consta no header time.h: typedef long clock_t Ou você quer saber a unidade de tempo usada pela função? Nesse caso, a unidade é milisegundos. Até mais!
-
Opa! Esta a usar o Borland Turbo C? O tamanho limite para arrays é definido como sendo 64K. Para poder declarar arrays com tamanhos maiores do que esse faça uso do modificador "huge", da seguinte forma: int huge mat[ 100 ][ 100 ][ 100 ]; Já o segundo erro é uma conseqüência do primeiro: como a declaração não foi bem sucedida, a variável não foi usada no programa. Até mais!
-
Opa! Você deve, antes de ler para a string "nome" usando "cin", alocar dinamicamente memória para o ponteiro. Para isso, use o operador "new" da seguinte forma: nome = new char; Depois, para liberar a memória urilizada (quando ela não for mais útil), use o operador "delete" da seguinte forma: delete nome; Para mais informações sobre alocação dinâmica com "new", clique aqui. Até mais!
-
Opa! O tipo de dados que voce utilizara sera string, que e um array (ou um ponteiro para) um char. Sendo assim, a sua declaracao ficara assim: char *nome; char n1[] = "victor", n2[] = "felipe"; int idade; A primeira linha declara um ponteiro para um char. A segunda declara dois arrays sem tamanho definido para voce inicializar a sua string. Para comparar duas strings, voce tem que usar a funcao strcmp(), que retorna 0 caso as duas strings que voce forneceu como parametros forem iguais. então, para comparar: if ( strcmp( nome, n1 ) == 0 ) idade=18; if ( strcmp( nome, n2 )== 0 ) idade=17; else idade=6; Ate mais!
-
Opa! Primeiramente, se a variável "idade" for um vetor de inteiros, então o seu "fscanf" deveria ficar assim: fscanf( fp, "%d", &idade[ i ] ); uma vez que "%s" se refere a strings. O mesmo no que tange à veriável "salario": fscanf( fp, "%f", &salario[ i ] ); Qual o tipo da variável "sexo"? Se for "char", o "fscanf" também irá mudar: fscanf( fp, "%c", &sexo[ i ] ); Declare e inicialize uma variável "soma" com 0 e, dentro do loop, some a esta variável o valor do salário atual. É melhor usar um "do...while", visto que assim você poderá fazer a leitura de "idade" somente uma vez e antes da condição ser testada. do { fscanf( fp, "%d", &idade[ i ] ); fscanf( fp, "%c", &sexo[ i ] ); fscanf( fp, "%f", &salario[ i ] ); // execute a soma i++; } while ( idade[ i ] != 0 ); Para calcular a média do salário, divida a soma pelo número de salários lidos menos 1 (porque a última leiura não será válida, uma vez que corresponderá à idade 0 e também deverá valer 0). Para saber quantos homens e quantas mulheres existem no arquivo, declare e inicialize duas variáveis, "masc" e fem", com 0 e percorra o vetor "sexo" testando os dois casos possíveis e incrementando "masc" quando for masculino e "fem" caso contrário. Até mais!
-
Opa! Olha só, a leitura de strings com "scanf" se dá da seguinte forma: scanf( "%s", nome ); Note a ausência do "&" no segundo argumento, uma vez que "nome" já é um ponteiro. Também não é necessário colocar o comprimento do vetor. No seu código há o seguinte trecho: for ( i = 0; i < 15; i++ ) printf( "* %s *", nome[ 15 ] ); Se você quer simplesmente imprimir na tela a string, então não é necessária a utilização do loop, bastando, para isso, usar o "printf", mas sem precisar especificar o comprimento do vetor. O mesmo você faz na próxima impressão. Se algo ficou pendente, poste aí donovo, valeu? Até mais!
-
Opa! Você pode dinamizar seu código através do uso de vetores bidimensionais, ou matrizes. Da mesma forma que vetores unidimensionais podem ser comparados a uma lista, os bidimensionais (matrizes) se assemelham a tabelas. Dessa forma, para acessar um elemento de uma matriz você deve fornecer dois valores: o número da linha na qual se encontra o elemento e o número da coluna. No seu caso poderia-se criar uma matrizes chamada "voo" cujas linhas seriam os números dos vôos e as colunas as cadeiras de cada um desses vôos. Sendo assim, a declaração ficaria assim: voo[ 37 ][ 10 ]; Com isso não terá a necessidade de fazer 37 tests com "ifs". Basta fazer assim: ... scanf( "%d", &num_voo ); for ( i = 0; i < 10; i++ ) if(voo1[ num_voo ][ i ] == 0 ) { lugvazios[i] = i; printf("%d ",lugvazios[i]); } ... Sabendo que "num_voo" seria a variável que armazenaria o número do vôo digitado pelo usuário. Até mais!
-
Opa! Digamos que queira que o usuário digite "s" e saia do loop. Para isso, faça o seguinte: char c; ... scanf( "%c", &c ); if ( c == 's' || c == 'S' ) break; Se quiser que ele digite "sair" para sair: char *s; ... scanf( "%s", s ); // observe a falta do "&", uma vez que "s" já é um ponteiro if ( strcmp( s, "sair" ) == 0 ) break; Sendo que "strcmp" é uma função que retorna 0 se as duas strings que ela recebe como argumentos forem iguais. Até mais!
-
Opa! Para passar arrays bidimensionais para funções você deve, no protótipo da função, informar o quantas colunas têm no array dessa forma: void print( int array[][ num_colunas ] ); No seu caso ficaria: int direcao( char matrix[][ LIM ], int limite_lin, int limite_col, int in_lin, int in_col, int out_lin, int out_col ); Sacou? Até mais!