Ir ao conteúdo

C++


PESSOA

Posts recomendados

Postado

PESSOAL, POR FAVOR ME DEEM UM AUXILIO POIS PRECISO DE ALGUNS EXEMPLOS DE FUNÇÃO EM C++, SÃO PARA EXERCÍCIOS DA FACULDADE, ALGO COMO FAZER UMA FUNÇÃO PARA EXIBIR OS NUMEROS PARES QUE FOREM DIGITADOS PELO USUÁRIO. EU SOU TOTALMENTE VERDINHO NESTE EM C++. SE ALGUEM SOUBER DE ALUMA APOSTILA.  :-(P

Postado

Colega Pessoa, você quer uma função que verifique se o no. digitado pelo usuário é par? Se for isso, te mando o código em C++, ok?

Abraços :D

Postado

:-DD e ai Spiderman beleza!

Cara, eu preciso de uma função que ao ser digitado um nome (string) qualquer ela me apresente o nome ao contrario, POR EXEMPLO:

DIGITE SEU NOME: SPIDERMAN

SEU NOME AO CONTRARIO É:NAMREDIPS

VOCÊ PUDER ME ENVIAR ESTE CÓDIGO AGRADEÇO,

UM ABRAÇO.

Postado

Ok colega, eis o código:

#include <iostream.h>

#include <stdio.h>

#include <string.h>

#include <conio.h>

const int COMP = 81;   //comprimento da cadeia de caracteres

//protótipo da função inverteString

void inverteString(char*);  

int main(int argc, char **argv)

{

   char frase[COMP];

   cout << "Digite uma frase (Max. 80 caracteres): ";

   gets(frase);

   inverteString(frase);

   cout << "Frase invertida: " << frase;

   getch();

   return 0;

}

// Inverte uma cadeia de caracteres

//Essa função recebe como argumento um endereço, perceba

//que s é um ponteiro para caracteres

void inverteString(char* s)

{

   //ponteiro auxiliar, iniciar com uma cadeia nula

   char* aux = "";  

   int t;

   t = strlen(s);  

   for(int i = 0; i < t; i++)

   {        

       *(aux + i) = s[t - 1 - i];

   }

   *(aux + t) = '\0';

   strcpy(s, aux);

}

Espero ter sido útil.

Abraços

Postado
Postado Originalmente por Spiderman@13 Set. 2002,19:11

void inverteString(char* s)

{

   //ponteiro auxiliar, iniciar com uma cadeia nula

   char* aux = "";  

   int t;

   t = strlen(s);  

   for(int i = 0; i < t; i++)

   {        

       *(aux + i) = s[t - 1 - i];

   }

   *(aux + t) = '\0';

   strcpy(s, aux);

}

Esse código causa uma quebra no programa. Você inicializa a variável char* aux num endereço com uma string vazia (de um único byte, '\0'). Após isso você começa a avançar além do espaço alocado pelo compilador (que é de apenas 1 byte), e começa a escrever sobre endereço inválido.

Sugiro uma inverteString( ) assim:


void inverteString(char* s)
{
       int t = strlen(s); // tamanho da string
       char* aux = new char[t+1]; // aloca apenas o espaço necessário
       strcpy(aux, s); // copia a string e coloca o limitador nulo
       for (int i=0; i<t; i++)
               s[ i ] = aux[ t-i-1 ];
       delete aux; // libera a memória alocada
}

Postado

# Programa que lê os numeros pares ou impares digitados #

#include <iostream.h>

#include <conio.h>

void main(){

long x;

cout<<"Digite um numero por favor ";

cin>>x;

if(x%2 == 0 )

cout<<"O numero " <<x <<" digitado e  par";

else{

cout<<"O numero " <<x <<" digitado e impar";

}

getch();

clrscr();

}

Abraços !!

Postado

Essa é a solução ideal, colega DanielKO. Tentei escrever esse código sem usar alocação dinâmica de memória porque percebi que o colega Pessoa ainda não sabe todos os "macetes" da linguagem C++. O código original não chama strcpy porque faço inverteString retornar um ponteiro para caracteres. Assim, inverteString teria o seguinte protótipo:

#include <iostream.h>

...

...

char* inverteString(char*);

...

...

também não é necessário usar delete porque aux é uma variável local. Todas as variáveis locais são destruídas quando uma função termina, ok?

Valeu pela sugestão, colega!

Abraços...

Postado
Postado Originalmente por Spiderman@15 Set. 2002,14:24

também não é necessário usar delete porque aux é uma variável local. Todas as variáveis locais são destruídas quando uma função termina, ok?

aux é uma variável ponteiro local, mas a memória que eu aloquei prá ela não é local. new vai alocar memória no heap, e ela precisa ser liberada no final com um delete.

No seu código você alocou apenas 1 byte local ( char* aux = ""; ) para onde apontou o ponteiro aux. Incrementando aux vai fazer com que você tente escrever/ler numa região de memória inválida (provavelmente alguma área de código executável). O que eu fiz foi usar o new para criar um array dinamicamente (a mesma coisa que usar o malloc() em C).

Postado
Postado Originalmente por DanielKO@13 Set. 2002,21:34


       delete aux; // libera a memória alocada

Ooops... erro de digitação...  :;):

O correto seria:


       delete[] aux; // libera a memória alocada

:**

Postado

char* inverte(char *st)

{

char *st2=st,*st3=st,st4;

while(*st)

st++;

while(st2<st)

{

st4=*(--st);

*st=*st2;

*st2++=st4;

}

return st3;

}

Postado
aux é uma variável ponteiro local, mas a memória que eu aloquei prá ela não é local. new vai alocar memória no heap, e ela precisa ser liberada no final com um delete.

Verdade, esqueci desse detalhe!

Valeu...

:-DD

Postado

IREI TESTAR HOJE ESTES PROGRAMAS POIS É PARA FACULDADE E SÓ CONSEGUI O COMPILADOR DO TURBO C++ ontem , REALMENTE SOU NOVO EM PROGRAMAÇÃO, ESTOU APRENDENDO AOS POUCOS, COM ALGUM MATERIAL QUE CONSEGUI NA INTERNET E COM AJUDA DOS COMPANHEIROS,  MESMO ASSIM VALEU GALERA.  :D

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!