![](https://forum.scriptbrasil.com.br/uploads/set_resources_1/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
Castro
-
Total de itens
103 -
Registro em
-
Última visita
Posts postados por Castro
-
-
:)
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:
12 d:\fontec\cadastro.c
conio2.h: No such file or directory
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:
:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x43):cadastro.c: undefined reference to `gotoxy'
C:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x245):cadastro.c: undefined reference to `gotoxy'
C:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x264):cadastro.c: undefined reference to `gotoxy'
C:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x283):cadastro.c: undefined reference to `gotoxy'
C:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x2a2):cadastro.c: undefined reference to `gotoxy'
C:\WINDOWS\TEMP\cc5BAyfb.o(.text+0x2c1):cadastro.c: more undefined references to `gotoxy' follow
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 :
Até onde sei depende do S.O o Linux libera memória para ser usada sim..... O Windows deve fazer o mesmo......
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:
Se diz que as variáveis locais ocupam uma posição específica na memória – A pilha, as variáveis alocadas comportam –se como variáveis globais, pois ocupam posição arbitrária na memória. Contudo, há uma diferença entre variáveis globais e alocadas, as variáveis globais são definidas em tempo de compilação, enquanto as variáveis alocadas são definidas em tempo de execução. Portanto o tamanho de uma variável alocada pode ser definido em função de parâmetros que somente são conhecidos em tempo de execução. Isso da enorme flexibilidade para o programador
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
Os programas que alocam memória devem ter o cuidado de liberar a memória que não precisam mais. A memória alocada permanece indisponível para outros usos, mesmo que o programa que tenha alocado a memória tenha terminado.
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
-
:(
Arquivo texto
Um fluxo de texto é composto por uma seqüência de caracteres, que pode ou não ser dividida em linhas terminadas por um caracter de final de linha. Um detalhe que deve ser considerado é que na última linha não é obrigatório o caracter de fim de linha.
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 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”. ?
Arquivo binário
Um fluxo binário é composto por uma seqüência de bytes lidos, sem tradução, diretamente do dispositivo externo. Não ocorre nenhuma tradução e existe uma correspondência um para um entre os dados do dispositivo e os que estão no fluxo.
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
Operações Com Numeros Binarios Em C
em C, C++
Postado · Editado por Castro
:)
Obtive esta informação:
Pessoal !! Fiz o seguinte teste para tentar usar a explicação, mas....
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