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

CIWS

Programar sem ter aulas

20 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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]));
	}	
}


}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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á?
***** */
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora