Ir para conteúdo
Fórum Script Brasil

Castro

Membros
  • Total de itens

    103
  • Registro em

  • Última visita

Posts postados por Castro

  1. :)

    Obtive esta informação:

    | - ou inclusivo bit a bit - 001 | 011 = 011 - se qualquer um dos dois bits for 1 o resultado é 1, se os dois forem 0 o resultado é 0;

    & - e lógico bit a bit - 001 | 011 = 001 - se os dois bits forem 1 o resultado é 1, se qualquer um dos bits for 0 o resultado é 1;

    ^ - ou exclusivo bit a bit - 001 | 011 = 010 - se um e apenas um dos dois bits for 1 o resultado é 1, se os dois forem 0 ou se os dois forem 1 o resultado é 0.

    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");
    ...................................

    Resultado:

    Comparando os numeros 4 e 5

    Resultado:Um dos bits e 1 (um)

    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

  2. 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)

  3. 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

  4. 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

  5. :(

    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 ?

  6. :(

    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 ?

  7. :(

    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 ?

  8. :(

    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.

  9. :(

    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 ?

  10. 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.

  11. :(

    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 ?

  12. :(

    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

  13. :(

    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,

  14. ..

    ..

    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,

  15. :(

    
    ..........
    ..........
    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,

  16. 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 ?

    :(

  17. <_<

    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);
    }
    

  18. :(

    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.

×
×
  • Criar Novo...