
Castro
Membros-
Total de itens
103 -
Registro em
-
Última visita
Tudo que Castro postou
-
:) Obtive esta informação: Pessoal !! Fiz o seguinte teste para tentar usar a explicação, mas.... ................... int valor1 = 4; int valor2 = 5; char binario4[20]; printf ("\nComparando os numeros 4 e 5\n"); if (itoa(valor1 | valor2, binario4, 2)) { printf ("\nResultado:Um dos bits e 1 (um)\n\n"); } else { printf ("\nResultado:Os dois bits são 0 (zero)\n\n"); } system ("pause"); ................................... O fato é que não estou sabendo ativar o “else”, já mudei os valores 4 e 5 por outros, e o resultado é sempre o mesmo. Definitivamente, não estou sabendo interpretar o funcionamento do “ou” (|) e o “e” (&) de campo de bit . Poderia ajudar ? Obrigado
-
:) Ok. Mas se eu quiser usar operadores de bit ? não poderei trabalhar com string, terei que usar a representação inteira do número binario, e não somente 10, não fica estranho ? como fazer ?
-
Sim. devo ter me equivocado. Vi uma ver são 5, e lá tinha um icone de cartão de crédito visa. Mas o site é esse. Acho que pequei o arquivo errado quando cliquei no aquivo, apareceu lixo. Obrigado Ps repeti por que não logei e não estava identivicado ps2 A versão aparece quando chamo o Dev-c++ 4. e quando baixei não estava escrito beta, a cor da página estava verde e minha versão IDE é para Windowas. Ps3; No Help aparece : GENU Debugger 4.18 (GDB)
-
Minha versão do Dev-C++ é a 4 (quatro). Quando tentei baixar a versão mais recente, vi que era paga. Por isso peguei esta. se puder me indicar um link para pegar o conio2.h para versão 4 agradeço. Alem disso baixar um Dev-C++ maisecente consumiria muita conexão(impulso). uso internet discada. Mas se não tiver jeito, por favor indique uma versão mais recente e gratuita. Obrigado
-
Não. Devo atribuir o arquivo ao ícone do DEVCPP ? Será que não peguei um arquivo para Linux e por isso não reconheceu o arquivo direto ? O arquivo está com aquele ícone de fundo branco com a bandeirinha do Windows, o que dá a entender que o arquivo não tem software ligado a ele . O que fazer ? Obrigado e um abraço
-
Eu cliquei no arquivo. O Windows abriu a caixa de diálogo Abrir Com: É para clicar no icone do dev-C++ onde esta escrito DEVCPP ?
-
:( Baixei um arquivo chamado conio-2.0-1moLDevPak, e copiei para o diretório C\Dev-c++\include Abri o Dev-C++ versão 4, chamei meu programa, fui em optios -> compiler options -> Add the diretory below to be searched for include files -> marquei a caixa e digitei –Iconio - > OK Ao compilar o programa, recebi a seguinte mensagem de erro: PS: Estou usando uma versão Windows. Onde estou errando ?
-
:( Veja o fragmento de código abaixo: void Menu(void) { int opcao=0; /*inicializa o swith*/ system("CLS"); gotoxy (20,8);printf ("Entre com a opcao desejada:"); gotoxy (20,9);printf ("============================"); gotoxy (20,11);printf ("1- Entrada de dados"); gotoxy (20,12);printf ("2- Criar arquivo"); gotoxy (20,13);printf ("3- Atualizar arquivo"); gotoxy (20,14);printf ("4- Ler arquivo"); gotoxy (20,15);printf ("5- Apagar arquivo"); gotoxy (20,16);printf ("6- Sair"); gotoxy (10,20);printf ("Digite a op‡Æo: [ ] e tecle ENTER"); .............................................................................................. ................................................................................................. O fragmento de código acima, foi feito originalmente em TURBO C (coisa bem velha). Só que o código em si é bem interessante, bata ler os itens do menu. E usa uma função chamada gotoxy() para posicionar texto em vídeo. A questão, é que estou migrando esse código para um compilador mais moderno, no caso o gcc (Dev-C++ v.4) ao rodar o programa, recebi a seguinte mensagem: Como resultado 0 linhas copiladas e tamanho do arquivo 0. Já me disseram que o Dev-C++ não tem função para posicionar texto em vídeo. O que faço ? sempre ouvi dizer, que o padrão ANSI não tinha função padrão para esse tipo de coisa, mas que todo compilador teria uma para resolver essa questão. Será que isso não é verdade ? Caso Dev-C++ não tenha poderia indicar um caminho ou um outro compilador que tenha e possa ser baixado na internet gratuitamente ?
-
:( Considere o código abaixo: int main() { int binario =0000000000000010; printf ("\n O valor da variavel (binario) e = %d\n\n", binario); system ("Pause"); return(0); } Como faço para mostrar um número binário em C ? sei que esse programa tem um erro. Números começados com 0, representam a base oito (octal), assim sendo como representar números na base dois em C ?
-
:( 18)Ao rodar seu programa, tive a impressão, de que os endereços de memória da variável p[0] e p[1], são seqüenciais. Conclui corretamente ? Fiz os seguintes experimentos com seu programa: 18-1) No 1o teste: transformei a variável ponteiro *p, e uma variável inteiro p. Tive como resposta, a seguinte mensagem de erro: 4 c:\meusdo~1\s.c warning: assignment makes integer from pointer without a cast C:\Meus documentos\S.c compiled successfully 18-2) No 2o teste: Fiz p = malloc(11 * sizeof (int)); tirei o (int*), e tive como resultado Valor 0 posição memória 00000000 .............................................................. .............................................................. Valor 10 posição memória 0000000A Ou seja parece que neste caso a variável ponteiro não fez muita falta por que ?, me parece que esta é uma outra forma de ver as posições de memória. Outro ponto, que me chamou a atenção, é que parece que o fato de eu ter deixado de usar matriz seja de inteiro ou ponteiro para inteiro parece não ter feito diferença. E ai pergunto por que preciso usar ponteiro para alocar memória ? Favor comente. 18-3) No 3o teste: retornei o programa as condições originais Valor 0 posição memória 02660480 .............................................................. .............................................................. Valor 10 posição memória 026604A8 E fiz o seguinte teste: Aumentei o laço do comando for da variável p[0] de11 para 13. Achei que ao fazer isso, receberia alguma mensagem de erro. Para minha surpresa, não acusou nenhum erro. Entretanto ao ver o resultado do programa, tiver como resultado: ......................................................... Valor 11 posição memória 026604AC Valor 12 posição memória 026604B0 Pensei, que o incremento p[0]++ estaria condicionado a linha: p[0] = (int *) malloc(11 * sizeof (int)); entretanto, acho que não isso que ocorre não deveria apontar para uma região invalida e dar erro ? por que isso ? 18-4) Retornei o programa as condições originais, criei o código abaixo, e testei o seguinte: int *p,i; p = (int*) malloc(11 * sizeof (int)); for (i=0; i<11;i++) { p =&i; /* inicializando p */ printf ("O valor de p %d, O endereço alocado para p %p\n",*p, p); p++; } Neste teste, todos os valores variaram e os endereços foram repetidos. O que me sugeriu, que em seu código, p[0], apesar de ser um elemento de matriz ponteiros para inteiros, funcionaria como uma matriz de endereços. Isto é correto ? 18-5) Modifique a linha de meu código de p =&i para *p =i; e as coisas funcionaram como no seu programa, ou seja 10 valores correspondendo a 10 endereços diferentes . Sei que o operador unário *, fornece conteúdo da variável, e o operador & fornece o endereço. Por isso achei que através do endereço dos valores poderia mostrar os próprios endereços. O que estava errado nessa idéia ? 18-5) Entretanto, fiz *p=&i; , e funcionou como *p =i; por que nesse caso são formas equivalentes ? 18-6) Sempre se sugere, que após a alocação de memorai, faça o teste do ponteiro nulo (if p==NULL)) por que seu programa não utilizou este expediente ? Obigado.
-
:( 15) Então continuando. Tome por exemplo o último programa, que foi o que deu cerato. Seguindo o raciocínio, se eu alocar as 11 posições na memória livre, eu teria as variáveis de p[0] à p[10] alocadas na memória livre de forma contígua, com malloc() retornando para a primeira posição. Certo ? daí continuo com minha dúvida prática, se quando uso ponteiros, já estou trabalhando com memória, ganhando performance, que vantagem tenho em alocar memória livre para essa 11 variáveis ? Kandrade e pessoal do fórum vocês não acham essa questão instigaste ? enxergar essa sutileza não seria chave no estudo de C ? 16) Com relação ao liberação de memória : Quando o Windows reclama de falta de memória durante a execução de algum programa ou conjunto de programas, não seria exatamente a falha do uso de alguma dessas funções de liberação de memória ? 17) O Graymalkin, diz no post #5, que fazendo malloc() com (int*), estou explicitando que se quer um ponteiro para inteiro. Li que quando se faz isto, está se fazendo um CAST (conversão de tipo). Pergunto: Se o retorno, é um ponteiro para o tipo inteiro, por que especificar ou converter tipo ?
-
13) Kandrade, Ok, funcionou. Mostrei os valores de 0 até 10. Fiz o seguinte: :) .......... .......... for (i=0; i<11;i++) { p[i] = (int*) malloc(11 * sizeof (int)); } ................... .................. for (i=0; i<11;i++) { p[i] =&i; /* inicializando p */ printf ("O valor alocado para p %d\n",*p[i]); } .......... ........ free(p); Daí pergunto: Se estou alocando uma matriz de ponteiros inteiros, uma simples free(p), libera todas as posições de memória ? a função free() funciona como matriz passada como argumento de função, ou seja, basta passar o endereço do primeiro elemento da matriz e o resto é encontrado porque está em posição contígua de memória ? 14) experimentei das duas formas que você falou. A versão acima, e p[0] = (int*) malloc(11 * sizeof (int)); nos dois casos deu certo. Isto quer dizer, que a posição 0 foi alocada na memória livre, e as posições de 1 à 10 não. Pergunto em termos práticos, qual a vantagem de se alocar uma variável ou uma matriz em memória livre ? não percebi mudança de desempenho, ou qualquer outro ganho significativo. PS a pergunta 10 continua valendo a afirmativa, lá feita é correta ? As distribuições Linux ainda vem com gcc no pacote ? Obrigado.
-
:( int *p[11],i; p = (int*) malloc(11 * sizeof (int)); .............. .............. for (i=0; i<11;i++) { p[i] =&i; /* inicializando p */ printf ("O valor alocado para p %d\n",*p[i]); } .......................................... .......................................... Fiz a inicialização, entretanto, a mensagem de erro permanece. “10 d:\fontec\sizeof.c incompatible types in assignment” O erro recai na linha que aloca as 11 posições de memória. Não estou visualizado o motivo do erro, já que fiz a inicialização da variável ‘p’ dentro do FOR. O que estou fazendo errado ?
-
:( int *p[11],i; p = (int*) malloc(11 * sizeof (int)); . . for (i=0; i<11;i++) { printf ("O valor alocado para p %d\n",*p[i]); } free (p); Resolvi segar a sugestão do isoron e “criar um loop inicializando automaticamente cada posição.” Para minha alegria, recebi a seguinte mensagem de erro: “10 d:\fontec\sizeof.c incompatible types in assignment”. Pessoal a pergunta 12 continua valendo. agora então
-
:( 9) Com base nesse papo todo, devo concluir, que só variáveis tipo ponteiro podem ser usadas para alocar memória, Correto ? 10) considere a citação abaixo: Dá para colocar isso em miúdos ? Não vejo tanta vantagem assim, apesar da portabilidade, se uma máquina não tiver memória suficiente em relação a uma outra, o programa terá a mesma dificuldade de ser rodado indepemdente da alocação, ou não ? Fonte: e-booke C/C++ e orientação a objetos em ambiente multiplataforma – versão 5.1 11) Considere a citação abaixo Fonte: e-booke C/C++ e orientação a objetos em ambiente multiplataforma – versão 5.1 Devo concluir, que se eu não usar a função free(nome_da_variável_alocada), mesmo ao finalizar meu programa, ficarei com aquela porção de memória alocada, e por conseqüência menos memória disponível ? mesmo que o programa seja feito em C, e não em C++ ? 12 ) Um dos companheiros disse, que meu programa exemplo lá em cima está errado. Algum de vocês pode corrigi-lo ? Obrigado,
-
.. .. 5) passei a escrever p= (int*) malloc(50 *sizeof(int)); e a variável “p” continuou a apresentar o mesmo valor acima. Acho que ainda Não entendi o que é esse valor. No meu entendimento eu deveria Ter o valor 100, ou seja 100 posições para 50 variáveis inteiras. Estou errado ? 6) Se eu estiver errado, então devo concluir, que alocação dinâmica só pode ser usada com matrizes, porque ai, eu seria obrigado a usar todas a posições contíguas de memória necessária para os elementos da matriz, conclui certo ? 7) Qual a versão de seu compilador Dev C++, pergunto isso, porque coloquei e tirei (int*) e não deu erro de compilação algum ( estou usando versão 4 -gratuita). 8) O outro companheiro de fórum sugeriu usar calloc() ao invés de malloc(). Li a descrição das duas, e não vi diferença ou vantagem. Tem alguma ? Obrigado,
-
3) Com base na resposta dada, qual a forma correta de se iniciar as 50 posições, sem lixo ? 4) Qual a diferença de se escrever a função malloc() como acima, e esta abaixo ? p= (int*) malloc(50 *sizeof(int)); Obrigado,
-
:( .......... .......... int *p; p = malloc(50 * sizeof (int)); if ( p == NULL) { printf (“falha”); exit (1); } printf (“O valor alocado é %d”, p); ............... ................. O valor de p é: 40240336 1) Suponho que o valor acima seja lixo. Achei que como o tipo inteiro tem 2 bytes, ao fazer 50 * 2 eu teria 100 bytes alocados para o ponteiro p Mas pelo visto não é isto que ocorre. O que está errado ? 2) O que faz exit (1) diferente de exit(0) ?. Obrigado,
-
Ok, consegui botar o operador seta para funcionar, entretanto, não consegui perceber a vantagem de usa-lo. Se faço, tvalor* pvalores = &valores; pvalores->var3 *= 2; deveria ter uma forma de mostrar pvalores com printf. Tipo: printf ("Mostre o valor do item de dado var3: %d\n",pvalores.var3,"\n"); e não somente, printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n"); Como antes. Assim parece dar mais trabalho, e pouco benefício. OO que tem a me dizer ? :(
-
Não consegui entender. seria mais fácil se você(s) mudasse a arotina que escrevi para que eu visualize o uso do operador seta. Obrigado.
-
<_< Pessoal estou colocando um exemplo de uso de estrutura, vara ver se algém pode muda-lo, usando operador seta (->). int main() { struct tvalor /*tdada e o nome da estrutura*/ { int var1; int var2; int var3; } valores = {10,20,30}; /*variavel de estrutura declara e inicializa */ clrscr(); printf ("visualizacao de itens de dados de uma estrutura na tela:","\n"); printf ("\n"); printf ("\n"); printf ("Mostre o valor do item de dado var1: %d\n",valores.var1,"\n"); printf ("Mostre o valor do item de dado var2: %d\n",valores.var2,"\n"); printf ("Mostre o valor do item de dado var3: %d\n",valores.var3,"\n"); return(0); }
-
<_< Se a pessoa que tiver a apostila puder por no site, agradeço. Tenho receio de tornar meu e-mail público e receber coisas indesejadas. Isso já acontece, tendo cuidado, imagine..... Obrigado
-
:( Considere a citação: Gostaria de entender a diferença entre arquivo texto e arquivo binário. No arquivo texto os caracteres podem ser terminados ou não por um caracter de final de linha, e também diz que a representação do caracter nem sempre é um para. Gostaria de entender essas afirmações. Eu tenho o hábito de meus e-mails em formato texto usando o bloco de notas do Windows. Quando acabo de colar o texto, fica tudo como uma linha só, então só tenho caracter de fim linha ? O que quer dizer “Nem sempre a tradução entre a representação do caracter no fluxo de texto e no sistema de arquivos do computador hospedeiro é um para um”. ? Considere o texto acima Se no tipo texto, nem sempre tem tradução, e no binário não tem correspondência um para um, então qual a diferença de arquivo binário para texto afinal ? um caracter não é um bit ? arquivo texto também não é composto de bytes ? Afinal qual a diferença ? Obrigado.
-
Felipe, gostaria muito de ver a página indicada http://www.cpdee.ufmg.br/cursos/C/aulas/c210.html Mas infelizmente, ela está fora do ar. Dizendo que o objeto não foi encontrado. uma pena.
-
:( Pessoal obrigado, mas preciso de uma resposta com maior segurança. Pretendo colocar a resposta num trabalho. Além disso nigém respondeu se a definção de diretiva de compilação está certa. mais uma vez brigado