Jump to content
Fórum Script Brasil

Don Quixote

Membros
  • Posts

    13
  • Joined

  • Last visited

About Don Quixote

Don Quixote's Achievements

0

Reputation

  1. Sim, Dennis. Mas o problema em usar CreateThread está no fato de que algumas funções e variáveis da STCRTL (Single-Threaded C Runtime Library) não funcionarem corretamente em um programa multi-threaded (ou multi-tarefa). A função _beginthreadex faz sim uma chamada a CreateThread para criar a thread, mas antes ela associa uma estrutura de dados a cada uma das threads criadas, eliminando essas incompatibilidades entre versões da CRTL (C Runtime Library).
  2. Don Quixote

    Ajuda Em Programa

    Do fscanf dentro do while.
  3. Use a função fprintf, que funciona de maneira similar à printf, mas recebe um argumento adicional (o primeiro na lista de argumentos) que indica o ponteiro para a estrutura FILE correspondente ao arquivo. Exemplo: fprintf( arquivo, "%d", variavel_inteira );
  4. Don Quixote

    Ajuda Em Programa

    Além de observar a solução do amigo acima, tem alguns erros no seu código. Na função letras, inicialize a variável cont com zero: ... int cont = 0; ... Na mesma função, declare uma variável char f e observe onde ficará o retorno da função. O loop deverá ficara assim: while( !feof( arq1 ) ) { fscanf( arq1, "%c", &f ); if ( f == c ) cont++; } fclose(arq1); return cont; Na função main tire o loop for. A leitura da string nome pode ser: gets( nome ); Depois de ler o caractere c com scanf coloque fflush( stdin ); Na hora de chamar a função letras, faça-o da seguinte forma s = letras( c, nome ); Assim, o seu código deverá ficar #include <stdio.h> #include <conio.h> #define tam 30 int letras( char c, char nome[] ) { FILE *arq1 = fopen( nome, "r" ); int cont = 0; char f; if( arq1 == NULL ) printf( "Erro!\n" ); else { while( !feof( arq1 ) ) { fscanf( arq1, "%c", &f ); if ( f == c ) cont++; } fclose( arq1 ); return cont; } } main () { int i,s; char nome[tam],c; printf("entre com uma palavra: "); gets(nome); printf("entre com uma letra: "); scanf("%c",&c); fflush( stdin ); s=letras(c,nome); printf("vezes %d",s); getch(); }
  5. Amigo, use a tag code e idente o código pra ficar mais claro.
  6. Use a função MessageBox, da biblioteca windows.h. O protótipo dela é algo parecido com o que segue: unsigned MessageBox( HWND h, const char *texto, const char *titulo, unsigned tipo ); O argumento "h" pode ser NULL; "texto" é o texto que deverá aparecer no corpo da caixa; "titulo" é o título da caixa; "tipo" indicar a "configuração" da caixa. Os valores de "tipo" que podem ser úteis são: MB_OK: Adiciona um botão "OK" na caixa. MB_OKCANCEL: Adiciona um botão "OK" e um "Cancelar" na caixa; retorna "IDOK" se o usurá clicar em "OK" ou "IDCANCEL" se clicar em "Cancelar". MB_YESNO: Adiciona um botão "Sim" e um botão "Não". Se o usuário clicar em "Sim", retornará "IDYES", se clicar em "Não", "IDNO". Há também o MB_ICONEXCLAMATION e o MB_ICONINFORMATION, que só adicionam um ícone que indica o gênero da caixa de mensagem. O primeiro especifica que a caixa é um alerta, e o segundo, que a caixa somente está informando o usuário. Veja o exemplo: #include <windows.h> ... t = MessageBox( NULL, "Clique em Sim para fazer ... ou Não para fazer ...", "Pergunta", MB_YESNO | MB_ICONINFORMATION ); if ( t == IDYES ) ... else if ( t == IDNO ) ... ...
  7. Para ter mais de uma função rodando "ao mesmo tempo" você deve fazer uso de uma técnica chamada multithreading, onde o programa teria várias threads, ou linhas de execução, rodando "simultaneamente". As aspas nas expressões que exprimem simultaneidade se devem ao fato de que o que ocorre realmente é que o processador concede um intervalo de tempo para uma thread fazer uma parte do seu trabalho, depois pausa essa e concede um intervalo para outra, e assim sucessivamente. Isso é o que se chama de chaveamento de contexto, a base de funcionamento da programação concorrente. Uma das funções que permitem a criação de threads em C é a _beginthreadex, da biblioteca "process.h". O protótipo dela é o seguinte: unsigned long _beginthreadex ( void *, // Atributos de segurança. Para // aplicações simples pode ser NULL. unsigned, // Tamanho da pilha (stack) da // thread. Pode ser 0, o que significa // que a pilha terá o mesmo tamanho // que a pilha da thread principal. unsigned ( _stdcall * )( void * ), // Ponteiro para a // função a ser // executada // (observe o // protótipo). void *, // Argumento para a função passada // acima. unsigned, // Estado inicial da thread. Pode ser // 0 para iniciar a execução logo quando // criada ou CREATE_SUSPEND para ser // criada pausada. unsigned * // ID da thread. Observe que é um // ponteiro. ); Se você tiver duas funções (com os protótipos equivalentes ao terceiro argumento da função acima, poderá executá-las concorrentemente chamando a função _beginthreadex para essas funções. Mas não é só isso, há outras (muitas outras) especificações quanto ao uso de threads. Creio que buscando no Google muitas informações preciosas poderão ser encontradas.
  8. Na última linha do seu laço for, adicione a seguinte linha: fflush( stdin ); Isso limpará o buffer de entrada.
  9. Para ignorar maiúsculas e minúsculas na comparação, você pode usar as funções tolower e toupper da biblioteca ctype.h, que convertem um caractere para minúsculo e maiúsculo, respectivamente. Assim, fazendo um loop percorre-se os caracteres formadores das strings comparando as suas versões convertidas, como no exemplo abaixo, onde a função compara retorna 0 se as duas strings não forem iguais e 1 caso contrário. int compara( const char a[], const char b[] ) { for ( int i = 0; a[ i ] != '\0'; i++ ) if ( toupper( a[ i ] ) != toupper( b[ i ] ) ) return 0; return 1; } Quanto aos acentos, desconheço alguma função que converta um caractere para sua versão desacentuada.
  10. Dá uma pesquisada por BGI (Borland Graphics Interface) ou OpenGL. Veja em http://www.unidev.com.br, ou busque no Google por "gamedev" (é porque esqueci o endereço).
  11. Don Quixote

    Somando Matrizes

    Ao passar arrays multidimensionais para uma função, na definição da função você deve colocar o tamanho das dimensões que vêm depois da primeira. Por exemplo, a função void f( int[][ 3 ] ); recebe uma matriz de n linhas e 3 colunas. Seria possível fazer também void f( int[ 3 ][ 3 ] ); no caso de a função receber uma matriz de tamanho fixo. Isso ocorre desta forma porque os elementos de um array (seja ele unidimensional ou multidimensional) são armazenados seqüencialmente na memória, e o compilador precisa saber quantos elementos saltar quando um elemento do tipo array[ 2 ][ 7 ] é referenciado. Quanto ao retorno, visto que arrays são passados por referência, o seu resultado já está armazenado na matriz a. Se quiser algo mais claro faça uma função assim: void SomaMatriz( int a[][ 2 ], int b[][ 2 ], int c[][ 2 ], int n ) { ... for( i=0; i<n; i++ ) for( j=0; j<n; j++ ) c[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ]; ... } Dessa forma a matriz onde o resultado será armazenado também é passada para a função, e nela o resultado será armazenado. Tente representar as suas matrizes n por m como arrays unidimensionais de dimensão nm, e adapte o seu algoritmo.
  12. Considerando-se em um loop, basta fazê-lo percorrer somente até a penúltima posição do vetor, assim não terá erro quando analisar a próxima posição. Observe o loop: for ( i = 0; i < tam - 1; i++ ) { if ( vetor[ i + 1 ] == 0 ) // ... } Se não foi isso que quis saber então seja mais claro, por favor.
  13. Don Quixote

    Outportb E Inportb

    Essas funções são para envio e recebimento de dados através de portas de comunicação, como a porta paralela. O protótipo de cada uma delas é o seguinte: unsigned char outportb( int porta, unsigned char dados ); unsigned char inportb( int porta ); A variável porta, vista em ambas as funções representa o endereço da porta com a qual se deseja trabalhar, e dados são os dados a serem enviados com a função outportb. Resumidamente, outportb envia um byte para uma porta e inportb lê um byte de uma porta. Procura um site chamado "Rogercom". Nele tem vários exemplos.
×
×
  • Create New...