Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

CIWS

Programar sem ter aulas

Recommended Posts

CIWS

Boas tardes, estou num ensino superior millitar e ao fim de 4aulas pediram o seguinte trabalho:

"Escreva uma função q recebe 2argumentos, uma string e um caracter e que remove todas as ocorrencias do caracter da string. Coloq esta função n1 programa em q é mostrado o conteudo da string antes e depois de ser processada".

Já pesquisei por mtos lados e se a primeira parte n oferece mtas duvidas qto ao resto n consigo por a trabalhar. Qem anda no ensino superior tb tem estes trabalhos em tão pouco espaço de tempo sem nunca terem programado na vida??

Desde já obrigado pela ajuda.

Share this post


Link to post
Share on other sites
Triton

Qem anda no ensino superior tb tem estes trabalhos em tão pouco espaço de tempo sem nunca terem programado na vida??

Se for como na minha faculdade (IST) é pior. Trabalhos em cima de trabalhos e para quem nunca programou acredito que seja difícil passar a determinadas cadeiras sem estudar bastante.


<3 life

Share this post


Link to post
Share on other sites
pmg

Escreva uma função q recebe 2argumentos, uma string e um caracter e que remove todas as ocorrencias do caracter da string. Coloq esta função n1 programa em q é mostrado o conteudo da string antes e depois de ser processada

Eu proponho um ponto de vista diferente.

Se não for necessário guardar a string sem o caracter removido para uso posterior, basta imprimir os caracteres diferentes do especificado:

#include <stdio.h>

/* Imprime args duas vezes.
* A primeira vez tal e qual como recebido
* e a segunda vez sem o caracter argc. */
void exercicio(const char *args, int argc) {
  puts(args);
  while (*args) {
    if (*args != argc) putchar(*args);
    args++;
  }
  puts("");
}

E a função pode ser usada assim:

int main(void)
{
  exercicio("exercicio", 'e');
  return 0;
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Guest tsenart

void chrdump(char *str, char chr)
{
int i;

for(i = 0; str[i] != '\0'; ++i)
{
	if(str[i] == chr)
	{
		memcpy(&str[i], &str[i+1], strlen(&str[i]));
	}	
}


}

Isso não funciona se tiveres dois ou mais caracteres que sao para ser removidos de seguida.

Share this post


Link to post
Share on other sites
zedlav

Tens razão.

Penso que este já dá.

void chrdump(char *str, char chr)
{
int i, count=0;

for(i = 0; str[i] != '\0'; ++i)
{
	if(str[i] != chr)
	{
          str[count]= str[i];
                  count++;
	}
            	
}

str[count]='\0';	
}

Share this post


Link to post
Share on other sites
Triton

Se não queres ter zero também no próximo aconselho-te a fazeres os exercícios por ti próprio e desenvolveres o raciocinio lógico necessário para ser um bom programador. Eu poderia simplesmente dar-te o código ou dizer-te os passos para resolver, mas não vou fazer e espero que mais ninguém o faça. É para teu bem. Isso é muito fácil, por isso vá, pega num editor e começa a trabalhar. :P


<3 life

Share this post


Link to post
Share on other sites
TheDark

Se não queres ter zero também no próximo aconselho-te a fazeres os exercícios por ti próprio e desenvolveres o raciocinio lógico necessário para ser um bom programador. Eu poderia simplesmente dar-te o código ou dizer-te os passos para resolver, mas não vou fazer e espero que mais ninguém o faça. É para teu bem. Isso é muito fácil, por isso vá, pega num editor e começa a trabalhar. :P

Subscrevo e assino por baixo. É mais uma razão, para além das óbvias que já foram explicadas vezes sem conta em muitos sítios por todo o fórum, para não apresentar código completo, ou aceitar código que não se baseie em algo que foi iniciado por quem faz a pergunta.


Desaparecido.

Share this post


Link to post
Share on other sites
Triton

Eu também estou num curso de Informática e tenho de "mamar" com cadeiras de Gestão entre outras. Considera como uma oportunidade para aprender uma coisa nova. Quem sabe no futuro pode-te vir a dar jeito.


<3 life

Share this post


Link to post
Share on other sites
Tharis

O programa é bastante simples...

#include <stdio.h>
#include <string.h>

int main() {
    char c,string[100];
    
    gets(string);
    c=getchar();
    
    for (i=0;i<strlen(string);i++)
        if (string[i]!=c) putchar(string[i]);

    return 0;
}

Share this post


Link to post
Share on other sites
zedlav

Isto de não se poder meter codigo para os outros estudarem e aprenderem, não gosto. Nunca estudei informatica nas escolas ou outro establecimento para o efeito, mas duvido que alguem aprenda sem olhar para o codigo dos outros. Até os livros que existem para se aprender, vêm com exemplos. Estranho é estarem na escola a aprender a programar depois terem de vir ao forum para tirar duvidas, que deveriam ser tiradas na escola. Isto é um forum , não é uma escola, como tal deviamos dar o codigo todo mas sem explicações para obrigar o intressado a estudar o codigo e os seus efeitos.

Share this post


Link to post
Share on other sites
Triton

zedlav, isso na teoria é muito bonito, mas na prática o que acontece é que vêm aqui pedir para fazermos trabalhos de casa. Não pedem código para estudar, mas sim para entregar. Se estão tão interessados em aprender, então mostrem o código que já têm que não funciona, ou mesmo podem pedir um exemplo do uso de uma função qualquer que não saibam como funciona. Até mesmo pedir ajuda no algoritmo necessário para resolver o problema. Nesses casos tenho todo o gosto em ajudar.


<3 life

Share this post


Link to post
Share on other sites
CIWS

O programa q fiz e q n corre foi o seguinte:

int strlen (char str[])
{
int count = 0;

while (str[count] != '\0');
	count++;

return count;
}

int Ordenar (char str1[],char str2[],char str3[])
{
int idx1 = strlen (str1) - 1;
int idx2 = strlen (str2) - 1;
int idx3 = strlen (str1) + strlen (str2);
int i,j,k;

while (str1[i] != '\0' && str2[j] != '\0')
{
	if (str1[i] < str2[j])
	{
		str3[k] = str1[i];
		i++;
		k++;
	}
	else
	{
		str3[k] = str2[j];
		j++;
		k++;
	}
return 0;
}
}	

Gostava q me ajudassem

Share this post


Link to post
Share on other sites
djthyrax

zedlav, uma coisa é dizer "epá, nunca li 2 inteiros ao mesmo tempo do stdin, podem dar-me umas ideias?", outra é dizer "podem dar-me um código que leia 2 inteiros e mostre a sua soma para eu entregar amanhã ao prof?". Concordo contigo que também se aprende (e muito) a olhar para código, mas há casos e casos.

Relembro que este tópico não é sobre se deve fazer os trabalhos de casa de alguém.

Já agora CIWS, quando se posta código, mete-o entre [ code=c] e [ /code] (sem espaços) para se ler melhor. :P O programa não funciona porque não tens uma função main(). Tens aqui no fórum um tutorial com o básico de programar em C feito pelo Hipnoted (não sei em que secção está, usa a procura ;)), vai-te dar algumas luzes que vais precisar no matter what. :)


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
pmg

Resposta dentro do código :)

int strlen (char str[])
/* *****
* O C já tem uma função para calcular a tamanho duma string.
* O nome dessa função é strlen e o protótipo é muito parecido com o da tua função.
* Aconselho-te a usares a função da biblioteca, por duas razões:
* a) é a função que toda a gente usa
* b) muito provavelmente funciona melhor que a tua
* Para usares a função strlen() da biblioteca do C, inclui o <string.h>
***** */
{
int count = 0;

while (str[count] != '\0');
	count++;

return count;
}

int Ordenar (char str1[],char str2[],char str3[])
/* *****
* Um conselho: se não vais alterar a str1 nem a str2, mete lá um const
* int Ordenar(const char str1[], const char str2[], char str3[])
***** */
{
int idx1 = strlen (str1) - 1;
int idx2 = strlen (str2) - 1;
int idx3 = strlen (str1) + strlen (str2);
/* *****
Faz antes
int idx = idx1 + idx2 + 2;
para não chamares a função strlen() desenecessariamente.
E não estou a ver a necessidade de inicializar idx3 com aquele valor (nem com idx1 + idx2) ...
Talvez daqui a 4 ou 5 linhas de código perceba a razão da inicialização com aquele valor.
***** */
int i,j,k;

while (str1[i] != '\0' && str2[j] != '\0')
{
	if (str1[i] < str2[j])
	{
		str3[k] = str1[i];
/* *****
OOPS BIGBIGBIG OOPS
k não está inicializado!!!!!!!
OOOOOOOOOOOOOOOOOOOOOOOOOOOPS
***** */
		i++;
		k++;
	}
	else
	{
		str3[k] = str2[j];
		j++;
		k++;
	}
return 0;
/* *****
* Este return está fora do sítio, não está?
***** */
}
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Tharis

zedlav, uma coisa é dizer "epá, nunca li 2 inteiros ao mesmo tempo do stdin, podem dar-me umas ideias?", outra é dizer "podem dar-me um código que leia 2 inteiros e mostre a sua soma para eu entregar amanhã ao prof?". Concordo contigo que também se aprende (e muito) a olhar para código, mas há casos e casos.

Relembro que este tópico não é sobre se deve fazer os trabalhos de casa de alguém.

Já agora CIWS, quando se posta código, mete-o entre [ code=c] e [ /code] (sem espaços) para se ler melhor. :D O programa não funciona porque não tens uma função main(). Tens aqui no fórum um tutorial com o básico de programar em C feito pelo Hipnoted (não sei em que secção está, usa a procura :) ), vai-te dar algumas luzes que vais precisar no matter what. :D

Concordo com o que ele disse, excepto que o tutorial foi feito pelo Kelker e postado pelo Hipnoted. :)

Share this post


Link to post
Share on other sites
CIWS

Boas uma vez mais,

Já fui ao tutorial recomendado, e alterei o meu programa, só q desta vez da-me warnings. Goastaria tambem q vissem se é mesmo isto q o prof qer ou se a minha outra versão é melhor. TKS

#include <stdio.h>

main()
{
  int i,j, f;		/* Define integers 	*/

  for (i=1, j=10; i<=10; ++i, --j)
  {
    printf ("f = %d\n",i,j);
  }
}

   i = 01  j = 02

   i = 03  j = 04

   i = 05  j = 06

   i = 07  j = 08

   i = 09  j = 10

Share this post


Link to post
Share on other sites
Njay

Então e quais são os warnings? Queres que adivinhemos, é um jogo :) ?

Tira a variável f que não estás a usar e adiciona um "return 0;" no final da função main.

A seguir precisas de corrigir o printf, pois estás a "dizer-lhe" para escrever apenas "f = <número-inteiro>" e isso nem sequer corresponde ao output "i = 01 j = 02 ..." que aí tens...


Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Share this post


Link to post
Share on other sites
Tharis

É o que o Njay disse e mais duas coisas:

Usa identação de 4 espaços e não 1.

Mete o teu código entre as tags [ code=C] e [ /code] (sem o espaço)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.