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

    Código Mostrando Erro

    Opa! Cara, comentei os erros em seu código no bloco abaixo: #include <stdio.h> #include <stdlib.h> // você deve abrir um bloco com "{" e no final da função fechar "}" se // estiver definindo a função void troco( int *mvintecinco, int moedas25, int *mdez, int moedas10, int *mcinco, int moedas5, int *mum, int moedas1, int valor ); mvintecinco = &moedas25; mdez = &moedas10; mcinco = &moedas5; mum = &moedas1; *moedas25 = valor / 25; // "moedas25" não é ponteiro valor = valor % 25 // sem ";" *moedas10=valor / 10; // "moedas10" não é ponteiro valor = valor % 10 // sem ";" *moedas5 = valor / 5; // "moedas5" não é ponteiro valor = valor % 5 // sem ";" *moedas1 = valor / 1; // "moedas1" não é ponteiro valor = valor % 1; printf( "\tQuant. de moedas de 25 e' %d\n", *mvintecinco ); printf( "\tQuant. de moedas de 10 e' %d\n", *mdez ); printf( "\tQuant. de moedas de 5 e' %d\n", *mcinco ); printf( "\tQuant. de moedas de 1 e' %d\n", *mum ); main() { int valor; printf( "\t************************************************\n" ); printf( "\t************************************************\n" ); printf( "\t*************** Digite o valor *****************\n" ); printf( "\t************************************************\n" ); printf( "\t************************************************\n" ); scanf( "%d", &valor ); troco( valor ); // "troc" possui 9 argumentos system( "pause" ); } Esse erro que você mostra não é o único. Como você não definiu o bloco do escopo da função, as variáveis que você declara como argumentos dela não estão definidas no escopo global, que é o escopo em que elas acabam caindo. Você não precisa usar todas essas manipulações de ponteiros; o código pode ser mais "direto". Veja: #include <stdio.h> #include <stdlib.h> void troco( int valor ) { int moedas25, moedas10, moedas5, moedas1; moedas25 = valor / 25; valor = valor % 25; moedas10 = valor / 10; valor = valor % 10; moedas5 = valor / 5; valor = valor % 5; moedas1 = valor / 1; valor = valor % 1; printf( "\tQuant. de moedas de 25 e' %d\n", moedas25 ); printf( "\tQuant. de moedas de 10 e' %d\n", moedas10 ); printf( "\tQuant. de moedas de 5 e' %d\n", moedas5 ); printf( "\tQuant. de moedas de 1 e' %d\n", moedas1 ); } main() { int valor; printf( "\t************************************************\n" ); printf( "\t************************************************\n" ); printf( "\t*************** Digite o valor *****************\n" ); printf( "\t************************************************\n" ); printf( "\t************************************************\n" ); scanf( "%d", &valor ); troco( valor ); system( "pause" ); } Dê uma lida nesse tutorial: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas-main.html. Boa sorte!
  2. Wicker Man

    Joguinho Simples Em C

    Opa! Cara, dois sites podem te ajudar: -> UNIDEV; -> GameDev. Boa sorte!
  3. Opa! Cara, com essa atribuição você está determinando que c1, final e nome são todos o mesmo vetor, pois estão apontando para a mesma posição de memória. Sendo mais claro, se você faz um ponteiro apontar para a primeira posição de memória de um vetor, aquele ponteiro "também será" aquele vetor. Não sei se isso esclarece a sua dúvida. Se não o fizer, poste-a novamente, explicando melhor. Boa sorte!
  4. Opa! Nesse caso as coisas ficam muito complicadas, porque é até possível implementar uma função que trate do caso do mouse passar sobre um elemento gráfico na tela, mas usando BGI o único modo que vejo de isso ser implementado é testando se as coordenadas do ponteiro do mouse "invadem" certa região da tela correspondente a um botão, digamos. Mas para isso ser feito seria necessário que esse teste ficasse rodando permanentemente, em paralelo à execução da linha de execução principal do programa. Mas como o compilador Turbo C++ não pode criar de linhas de execução que rodem concorrentemente dentro do programa (multithreading), então este método não é viável. Isso já não ocorre com eventos como um clique, onde você tem uma posição definida com a qual você pode trabalhar. A menos que seja estritamente necessário para você continuar usando a biblioteca BGI para criar interfaces gráficas, eu recomendo que você passe a estudar algo com Win32 (tutorial), ou a IDE Borland C++ Builder (links) (esta última, aliás, torna bem simples o desenvolvimento de aplicações relativamente complexas), por serem mais robustas e, além disso, elas fornecem recursos para desenvolvimento não só de interfaces gráficas, mas também para manipulação de vários outros recursos do sistema. Mas, se tiver mesmo que continuar com a BGI, aqui vão dois links que achei instrutivos: -> http://electrosofts.com/cgraphics/index.html -> http://electrosofts.com/cgraphics/mouse.html Boa sorte!
  5. Wicker Man

    Duvida Em Buidel

    Opa! Você poderia tentar o seguinte: declarar dois objetos do tipo AnsiString e atribuir os valores das suas variáveis que resultaram da consulta a esses objetos. Assim: ... AnsiString T_str, V_str; T_str = Query1->fields->FieldByName( T )->value; V_str = Query1->fields->FieldByName( V )->value; ... Depois você usa o método c_str para retornar a string no estilo C (array de caracteres com terminador nulo): ... fprintf( fp, "%s;%s", T_str.c_str(), V_str.c_str() ); ... Boa sorte!
  6. Opa! A biblioteca dirent.h fornece recursos para manipulação de diretórios. Nela você tem a função opendir, que abre um diretório cujo caminho deve ser especificado em seu único argumento. Depois de ter o diretório aberto, você pode usar a função readdir, que tem como único argumento o ponteiro para uma estrutura DIR retornado por opendir, para percorrer o conteúdo do diretório. Esta última função retorna um ponteiro para uma estrutura do tipo struct dirent, a qual possui um membro string chamado d_name, que armazena os nomes de arquivos e diretórios dentro do seu diretório. Você deve realizar várias chamadas à função readdir para obter o conteúdo do seu diretório. Por exemplo, se você tiver três arquivos no seu diretório, fará três chamadas a readdir, em cada uma delas o membro d_name da estrutura retornada terá o nome de cada arquivo presente no seu diretório. E quando o final do diretório é alcançado, readdir retorna NULL (você pode rewinddir para "voltar" ao início do diretório e poder usar readdir novamente; o único argumento de rewinddir é o ponteiro para DIR retornado por opendir). Finalmente, closedir recebe como único parâmetro a nossa estrutura DIR e fecha o diretório. Veja o exemplo: #include <stdio.h> #include <stdlib.h> #include <dirent.h> int main() { DIR *dp; struct dirent *d; dp = opendir( "C:\\Docume~1\\Diego\\Desktop" ); while ( ( d = readdir( dp ) ) != NULL ) printf( "%s\n", d->d_name ); closedir( dp ); system( "pause" ); return 0; } Agora, uma vez que você tem o nome dos arquivos no diretório, você pode filtrar a exibição (utilizando manipulação de strings) mostrando apenas arquivos com a extensão desejada. Ou pode dar uma busca mais profunda sobre essa biblioteca e ver se já existe algo mais eficiente. Boa sorte!
  7. Opa! As APIs gráficas já implementam esse tipo de tratamento. Com qual API você está trabalhando? Boa sorte!
  8. Wicker Man

    Ponteiro Para Matriz

    Opa! Ok, entendi a sua dúvida agora. Para passar um array n-dimensional (com n inteiro maior que ou igual a 2) para uma função, você deve fornecer também os últimos n - 1 índices do array (o primeiro pode ser passado também, mas não é obrigatório). O seu código deveria ficar assim: ... #define coluna 3 void imprimeMatriz( int matriz[][ coluna ], int linha ) { int count1, count2; for ( count1 = 0; count1 < coluna; count1++) { for ( count2 = 0; count2 < linha; count2++ ) { printf( "%d ", matriz[ count2 ][ count1 ] ); } printf( "\n" ); } } ... Mas se você deseja passar um ponteiro para uma matriz junto com suas dimensões (número de colunas e número de linhas), a sua matriz deve ser criada alocando memória dinamicamente. Para isso, pode-se usar a função malloc para alocar memória e free para liberar o espaço alocado. Veja este link sobre alocação dinâmica de arrays multidimensionais. Boa sorte!
  9. Wicker Man

    Guardar A Base De Dados

    Opa! Veja esses tópicos: -> http://scriptbrasil.com.br/forum/index.php?showtopic=108990 -> http://scriptbrasil.com.br/forum/index.php?showtopic=108781 Boa sorte!
  10. Wicker Man

    Compilador C++

    Opa! Que compilador você baixou? Que problema está ocorrendo? Boa sorte!
  11. Opa! Cara, dá uma olhada nesse tópico: http://scriptbrasil.com.br/forum/index.php?showtopic=108990. Dê também uma pesquisada em arquivos de acesso aleatório. Com eles você pode guardar dados contidos em uma estutura num arquivo (com fwrite) de modo que, com o auxílio das funções fseek e fread, você pode acessar uma estrutura específica dentre as armazenadas no arquivo. Veja o exemplo: #include <stdio.h> #include <stdlib.h> #include <conio.h> struct pessoa { char nome[ 30 ]; int idade; }; int main(int argc, char *argv[]) { FILE *_file; int i = 0, n; struct pessoa p; if ( ( _file = fopen( "arq.txt", "w+" ) ) == NULL ) { return 0; } while ( i < 5 ) { scanf( "%s", p.nome ); scanf( "%d", &p.idade ); fwrite( &p, sizeof( p ), 1, _file ); i++; } printf( "\n\n----------------\n\n" ); printf( "Digite a ordem do elemento que quer acessar: " ); scanf( "%d", &n ); fseek( _file, ( n - 1 ) * sizeof( struct pessoa ), SEEK_SET ); fread( &p, sizeof( struct pessoa ), 1, _file ); printf( "Nome: %s;\nIdade: %d.\n\n", p.nome, p.idade ); system("PAUSE"); return 0; } A função fseek somente localiza a posição do registro a ser lido. A leitura é feita com a função fread. O primeiro argumento da função fseek é o ponteiro para a estrutura FILE, o segundo é o número de bytes que se deve percorrer, a partir de uma posição inicial indicada no terceiro argumento, para se chegar à posição do registro desejado no arquivo. A constante SEEK_SET indica que a supramencionada posição inicial deve ser o início do arquivo. SEEK_CUR e SEEK_END são outros valores possíveis, correspondendo às posições atual e final, respectivamente. Boa sorte!
  12. Opa! Você deve usar as funções fread e fwrite para ler e escrever, respectivamente, estruturas em arquivos. Como exemplo, assuma que você possui a seguinte estrutura: ... struct pessoa { char nome[ 30 ]; int idade; }; ... Depois instanciar o objeto FILE tal como você o fez, você deve fazer o seguinte para gravar dados da estrutura no arquivo: ... struct pessoa p; int i = 0; while ( i < 3 ) { scanf( "%s", p.nome ); scanf( "%d", &p.idade ); fwrite( &p, sizeof( p ), 1, fp ); i++; } ... O primeiro argumento de fwrite é um ponteiro para o objeto da estrutura que contém os dados a serem armazenados, o segundo é o tamanho da estrutura em bytes, o terceiro é o número de elementos a serem inseridos e o último é o ponteiro para o arquivo (isto é, para o seu objeto da estrutura FILE). A função fread é usada de maneira similar: ... struct pessoa p; int i = 0; while ( i < 3 ) { fread( &p, sizeof( struct pessoa ), 1, fp ); printf( "Nome: %s;\nIdade: %d.\n\n", p.nome, p.idade ); i++; } ... Para entender mais sobre o uso desta função e outras de manipulação de arquivos de acesso aleatório, dê uma procurada no Google por exemplo, e dê uma olhada neste link. Boa sorte!
  13. Wicker Man

    Ponteiro Para Matriz

    Opa! Tem como especificar mais a sua dúvida, jovem? Por agora, posso te passar o seguinte: http://informatica.hsw.uol.com.br/programacao-em-c34.htm. Boa sorte!
  14. Opa! Para enviar e receber sinais pela porta paralela, eu uso e recomendo a DLL "inpout32.dll". Este link mostra como usá-la. Dê uma fuçada nesse site, pois há muito material que lhe pode ser útil. Qualquer dúvida, poste. Boa sorte!
  15. Wicker Man

    String

    Opa! Use a função strcpy da biblioteca string.h. Para entender como essa função funciona, veja a seguinte página: http://www.cplusplus.com/reference/clibrar...ing/strcpy.html. Boa sorte!
  16. Wicker Man

    Dos.h

    Opa! Você pode usar a biblioteca time.h. Nela você tem uma função time, que obtém os dados sobre o tempo atual (hora, minuto, segundo, dia, mês, etc.), uma estrutura tm, onde você pode armazenar esses dados, e uma função localtime que faz a conversão do tempo obtido com time para uma estrutura tm. Em time você deve fornecer um argumento que é um ponteiro para uma variável do tipo time_t, e esse mesmo ponteiro deve ser fornecido a localtime de modo que esta última retorna um ponteiro para a estrutura tm. Veja o exemplo: ... time_t t; struct tm *tempo; time( &t ); tempo = localtime( &t ); printf( "%d / %d / %d", tempo->tm_mday, tempo->tm_mon + 1, tempo->tm_year + 1900 ); ... Os membros tm_mday, tm_mon e tm_year de tm representam, respectivamente, o dia do mês atual, o mês atual a partir de janeiro (janeiro é representado por 0) e o número de anos decorridos desde 1900. Dê uma procurada no Google para ver mais. Boa sorte!
  17. Opa! Cara, declare a sua estrutura voos da seguinte forma: ... struct v { int NumeroDoVoo[ 10 ]; int Assentos[ 10 ]; }; struct v voos = { { 323, 324, 325, 326, 327, 401, 432, 450, 455, 502 }, { 50, 50, 60, 30, 20, 15, 100, 80, 50, 20 } }; ... Boa sorte!
  18. Opa! Que compilador está usando? Coloque os comprimentos dos arrays nas declarações. Até mais!
  19. Wicker Man

    Limpando Matriz

    Opa! Veja o código seguinte: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[] = { "Cinderela e aladim, abracadabra e abramelim..." }; printf( "%s\n", str ); memset( str, '-', strlen( str ) * sizeof( char ) ); puts( "%s\n", str ); system( "pause" ); return 0; } O segundo parâmetro de memset especifica o dado que você irá atribuir aos primeiros strlen( str ) * sizeof( char ) bytes do bloco de memória apontado pelo primeiro argumento. No caso acima, a string str será substituída por uma sequência de caracteres '-' (exceto o terminador nulo). Boa sorte!
  20. Wicker Man

    String

    Opa! Exemplo de strcpy: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char string1[] = "Opa!", string2[ 10 ]; strcpy( string2, string1 ); printf( "string2: %s\n", string2 ); system( "pause" ); return 0; } Por questões de segurança, string2 deve ser longa o suficiente para armazenar string1. Exemplo de strcat: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char string1[ 100 ], string2[] = "Boa sorte!"; strcpy( string1, "Opa!\n" ); strcat( string1, "Beleza?\n" ); strcat( string1, string2 ); printf( "string1: %s\n", string1 ); system( "pause" ); return 0; } Mais uma vez, é bom que string1 tenha tamanho suficiente para ter strings concatenadas a ela. Finalmente, um exemplo de strcmp: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char string1[] = "Amor", string2[] = "Raiva", string3[] = "Amor"; if ( strcmp( string1, string2 ) == 0 ) printf( "string1 igual a string2\n" ); else if ( strcmp( string1, string3 ) == 0 ) printf( "string1 igual a string3\n" ); system( "pause" ); return 0; } A função strcmp retorna 0 se as duas strings forem iguais. Dê uma olhada aqui: http://www.cplusplus.com/reference/clibrary/cstring/. Boa sorte!
  21. Wicker Man

    Ordena String

    Opa! Você pode usar o fato de que cada caractere tem um código numérico associado na tabela ASCII. Assim, aplique um algoritmo de ordenação como o "Bubble Sort" e terá a sua string ordenada. Para entender como funciona o "Bubble Sort", veja o seguinte link: http://pt.wikipedia.org/wiki/Bubble_sort#C.2B.2B. É importante notar também que caracteres maiúsculos e minúsculos tem diferentes códigos ASCII associados. Sendo assim, no momento da comparação no "Bubble Sort", tenho o cuidado de usar a função toupper (ou tolower) da biblioteca cctype (ou ctype.h) para comparar apenas maiúsculas (ou minúsculas) no "Bubble Sorte". Boa sorte!
  22. Opa! vet já é um ponteiro (todo vetor é um ponteiro para o primeiro elemento do vetor). Dessa forma, a atribuição deveria ser: ... ptr = vet; ... Boa sorte!
  23. Wicker Man

    Classes

    Opa! Cara, uma classe é uma estrutura que engloba as propriedades e funcionalidades de uma determinada categoria (classe) de objetos. As classes podem conter dados/funções públicos, privados e protegidos. Dados/funções protegidos estão relacionados a herança, então nos concentremos nos dados públicos e privados por agora. As funções em uma classe são chamadas métodos. As variáveis são os membros de dados da classe. Por exemplo, observe a classe a seguir: class MinhaClasse { public: void MetodoPublico(); // método público (função) int DadoPúblico; // membro de dados público (variável) private: void MetodoPrivado(); // método privado (função) int DadoPrivado; // membro de dados privado (variável) }; Como você pode perceber, membros de dados e métodos públicos estão sob a palavra-chave public, e os privados sob private. A diferença entre esses especificadores é que quando você cria um objeto dessa classe, esse objeto somente poderá fazer chamadas explicitas aos métodos públicos. Os métodos e dados privados só podem ser acessados pelos métodos (públicos ou privados) da classe. Isso é só o basicão mesmo, uma abordagem muito inicial e aproximada. Assim, se remanesceram dúvidas, poste-as. Estude um pouco mais sobre classes e dê uma pesquisada sobre engenharia de software para entender melhor algumas "regras" para o bom projeto de classes. Boa sorte!
  24. Opa! Você deve abrir o bloco do if depois de escrever o if: ... if ( senha == 12345 ) { ... Você deve também abrir chaves para o bloco do switch: ... switch( opcao ) { ... } ... Boa sorte!
  25. Opa! Você declarou a função como "sobtracao" na linha 5. Corrija para subtracao. Boa sorte!
×
×
  • Criar Novo...