Ir para conteúdo
Fórum Script Brasil

Wicker Man

Membros
  • Total de itens

    268
  • Registro em

  • Última visita

Tudo que Wicker Man postou

  1. 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!
  2. 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!
  3. 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!
  4. Wicker Man

    Erro Ao Compilar Em C

    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!
  5. Opa! E aí, man? Beleza? Cara, você poderia postar o seu código e grifar nele a linha onde o erro ocorre? Boa sorte!
  6. 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!
  7. Wicker Man

    Gerar Relatorio Html

    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!
  8. 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!
  9. Wicker Man

    Interface Grafica Em C

    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!
  10. Wicker Man

    Grafico 3d

    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!
  11. 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!
  12. Wicker Man

    não Ta Rodando...

    Aqui ele rodou direitinho. Qual é a sua dúvida?
  13. Wicker Man

    não Ta Rodando...

    Opa! Cara, falta fechar a chave da função fbindec. Seria interessante se você postasse os erros que encontrou. Boa sorte!
  14. Opa! Nas opções do projeto (Alt+P), clique em parâmetros e, na parte linker, digite a linha "-lmysql". Até mais!
  15. Wicker Man

    Erro Em Programa

    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!
  16. Wicker Man

    Erro :

    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!
  17. Wicker Man

    Erro :

    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!
  18. 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!
  19. 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!
  20. 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!
  21. Wicker Man

    Funcoes

    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!
  22. 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!
  23. Wicker Man

    Sair De Um For

    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!
  24. 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!
×
×
  • Criar Novo...