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

UnKnowN

Programa Simples

26 mensagens neste tópico

Estou a dar os primeiros passos em C, hj lembrei-me disto lol :P

O que é que se encontra mal neste code ?

#include<stdio.h>
main()
{
     int a, char *b;
     a=1;
     b="Olá";
     printf("%s és o %dº jogador", a, b);
     return 0;
{

Obrigado, Fikem Bem ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char *b?!

no maximo char b

isso apenas permite armazenar um caracter

para armezanar um conjunto de caracteres (string) seria:

char b[n];

ex:

int a;

char b[100];

para copiar uma string para b nao podes usar uma simples atribuiçao

mas sim copiares caracter a caracter ou usar a funçao strcpy que faz isso

strcpy(b,"Olá"); e tens que por um #include <string.h>

ou como alternativa quando a declaras char a[]={".."}; algo deste genero

nem o printf esta correcto!

seria algo do genero:

printf("%s és o %dº jogador", b, a);

%s - string

%d ou %i - inteiro

argumentos separados por vírgulas

"O que é que se encontra mal neste code ?"

A pergunta deveria ser o que se encontra bem neste code?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acho que so falta dizer que no fim abres chavetas, mas isso ta mal. tens de as fechar :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char *b?!

no maximo char b

isso apenas permite armazenar um caracter

para armezanar um conjunto de caracteres (string) seria:

char b[n];

ex:

int a;

char b[100];

para copiar uma string para b nao podes usar uma simples atribuiçao

mas sim copiares caracter a caracter ou usar a funçao strcpy que faz isso

strcpy(b,"Olá"); e tens que por um #include <string.h>

ou como alternativa quando a declaras char a[]={".."}; algo deste genero

nem o printf esta correcto!

seria algo do genero:

printf("%s és o %dº jogador", b, a);

%s - string

%d ou %i - inteiro

argumentos separados por vírgulas

"O que é que se encontra mal neste code ?"

A pergunta deveria ser o que se encontra bem neste code?!

Obrigado pela explicação como disse comecei hj de manha ...

acho que so falta dizer que no fim abres chavetas, mas isso ta mal. tens de as fechar :)

ya isso foi 1 erro Lamme :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como nao percebi uma data de coisas que o entering disse tentei por mim, com o que sei, fazer o projecto... ao compilar (usando Dev-C++) nao deu erro mas ao tentar executar dá erro, um daqueles erros chatos a perguntar se eu quero enviar ou não relatório... o code é este :

#include <string.h>
#include <stdio.h>
main()
{
     int a=1;
     char* b="Ola";
     printf("%s es o %dº jogador", a, b);
     return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char b[4];

strcpy (b,"ola");

substitui isto pelo que tens em char* b="Ola";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char b[4];

strcpy (b,"ola");

substitui isto pelo que tens em char* b="Ola";

Pk [4] e nao [3] ?

ola só tem 3 palvaras... :\

E o que é o strcpy ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a funçao strcpy permite copiar uma string para outra

char *strcpy (char *arg1, char *arg2)

Copia a string arg2 para a arg1

Esta definida na biblioteca string.h

Quanto ao facto de ser 4 e não 3 é porque em C uma string termina sempre em \0

Por exemplo a funçao strcpy seria algo deste genero:

char *strcpy (char *arg1, char *arg2) {
 int cont;
 for (cont=0; arg2[cont]!='\0';++cont)
   arg1[cont]=arg2[cont];
   arg1[cont]='\0';
   return arg1;
}

Como ves é necessario uma posiçao para o \0

Ou seja sempre que pensas numa string tem que ter mais uma posiçao para o \0

-----------

Tu nao tens noçoes nenhumas do que é uma string foi deixar aqui uma definiçao geral:

Em c as strings não são um tipo de dados básico, logo a única forma de representar strings é usando um conjuntos de caracteres isto é um vector (de caracteres).

----------

Quanto ao que tu queres fazer nao precisas de usar o strcpy, mas tens erros no code

$ gcc -Wall teste2.c

teste2.c:4: warning: return type defaults to `int'

teste2.c: In function `main':

teste2.c:7: warning: format argument is not a pointer (arg 2)

teste2.c:7: warning: int format, pointer arg (arg 3)

Para já estas a devolver um valor com o return no entanto antes do main nao tens o int!

Não estas a usar nenhuma funçao de strings logo nao precisas da biblioteca string.h

E tens o printf errado!

printf("%s es o %dº jogador", a, b);

a variavel a é um inteiro logo %d ou %i e nao %s de string

code correcto:

#include <stdio.h>
int main(void)
{
     int a=1;
     char* b="Ola";
     printf("%s es o %dº jogador", b, a);
     return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito Obrigado pela explicação :)

Tu nao tens noçoes nenhumas do que é uma string foi deixar aqui uma definiçao geral:

Em c as strings não são um tipo de dados básico, logo a única forma de representar strings é usando um conjuntos de caracteres isto é um vector (de caracteres).

1º Erraste, pk sim eu tenho noçoes do que são strings

2º Faz sentido o que escreveste aí :)

code correcto:

#include <stdio.h>

int main(void)

{

      int a=1;

      char* b="Ola";

      printf("%s es o %dº jogador", b, a);

      return 0;

}

Podes tu ou alguém explicar-me o que é o void ? E depois, então o que é o char* b, se é string pkek disseste que tinha de declarar um vector de caracteres ?

Obrigado []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao contrário de Pascal, onde tens um tipo de dados String predefinido,

var nome:string

em C tens de criar o tal vector de caracteres para escreveres texto.

char nome[10]

Este vector escreve um caracter em cada elemento e tem 10 elementos, ou seja, podes escrever 10 caracteres.

O void (se o Inglês não me falha) significa vácuo,vazio. Neste caso, significa que a função não tem parâmetros (penso que é assim).

Espero ter ajudado.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao contrário de Pascal, onde tens um tipo de dados String predefinido,

var nome:string

em C tens de criar o tal vector de caracteres para escreveres texto.

char nome[10]

Este vector escreve um caracter em cada elemento e tem 10 elementos, ou seja, podes escrever 10 caracteres.

O void (se o Inglês não me falha) significa vácuo,vazio. Neste caso, significa que a função não tem parâmetros (penso que é assim).

Espero ter ajudado.

Cumps,

Mas o que quero então saber é pkek o entering usou a "função" char*

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a dar os primeiros passos em C, hj lembrei-me disto lol :P

O que é que se encontra mal neste code ?

#include<stdio.h>
main()
{
  int a, char *b;
  a=1;
  b="Ola";
  printf("%s és o %dº jogador", a, b);
  return 0;
}

Obrigado, Fikem Bem ;)

bem andei a ler o que escreveram e que confusão aqui não vai... mas ja vi que o autor ja percebeu...mas vou deixar aqui o que achei ( +- ) disto...

tens erro aqui:


main()
{	(...)
return 0;
 }

como fazes return 0; deve ter int main , ou seja devias ter


int main()
{	(...)
return 0;
 }

depois outro erro

	  int a, 

mas sim

	  int a;  

outro erro:



  printf("%s es o %d jogador", a , b);

deves ter :



  printf("%s es o %d jogador",  b, a);

primeiro les a string, b aponta para o inicio de uma string ( notar que char* b; quer dizer que b é um ponteiro do tipo char e fazer char a[3]; a[0]='o', a[1]='l' , a [2]='a' é o mesmo que ter b=&a[0] ou ainda b=a .... b aponta para o endereço de memoria do 1 caracter da string e como 1 string tem as endereços de memorias seguido e termina com '\0'' o programa sabe quando temina a string apontada por b )

e segundo vai ler o digito.... atenção que não deves usar acentos, ª , º, .... porque depois aparecem caracteres estranhos..

o programa final sera:

#include<stdio.h>
int main()
{
  int a;
   char *b;
  a=1;
  b="Ola";
  printf("%s es o %d jogador\n", b,a);

  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

disse isso tudo, e não é uma questão de confusão

esta lá tudo para quem quiser ler

claro que nao faço a 'papinha' toda

desta vez até fiz bastante

citação

code correcto:

#include <stdio.h>

int main(void)

{

      int a=1;

      char* b="Ola";

      printf("%s es o %dº jogador", b, a);

      return 0;

}

resulta!

quanto ao teu code tofas:

alem do mais usar o system("PAUSE"); é uma estupidez

para nao falar que falta o stdlib.h que suporta a funçao system

se tivesses num concurso de programaçao o code ja nao passava

pois com a flag -Wall do gcc emite um warning

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quanto ao teu code tofas:

alem do mais usar o system("PAUSE"); é uma estupidez

para nao falar que falta o stdlib.h que suporta a funçao system

se tivesses num concurso de programaçao o code ja nao passava

pois com a flag -Wall do gcc emite um warning

nao era para colocar isso.... esqueci-me  :dontgetit: ja modifiquei...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, o C foi mais para ver como era.., e nao consegui ver bem como era ... inda estava numa fase de escolhas e acabei por optar pelo Python :thumbsup:

É facil e de simples uso

para terem 1 noçao da facilidade deixo aki 1 code com o objectivo de impressão de nºs pares de 1 a 100 o code é este:

>>> for i in range(1,101):
if i % 2 == 0:
	print i

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em que é que isso é mais fácil que

for (i=1; i<101; ++i)

if (i%2==0) printf("%d", i);

Isto pra não falar em c++, onde não é preciso formatação esquisita.

Conhecendo minimamente a linguagem, tudo se faz. Onde é preciso velocidade, o python morre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em que é que isso é mais fácil que

for (i=1; i<101; ++i)

if (i%2==0) printf("%d", i);

Isto pra não falar em c++, onde não é preciso formatação esquisita.

estava mesmo para dizer o mesmo que tu.... mas força!!  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em que é que isso é mais fácil que

for (i=1; i<101; ++i)

if (i%2==0) printf("%d", i);

Isto pra não falar em c++, onde não é preciso formatação esquisita.

Conhecendo minimamente a linguagem, tudo se faz. Onde é preciso velocidade, o python morre.

Morre ? Porquê ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estava mesmo para dizer o mesmo que tu.... mas força!!  ;)

Estou farto de ver toda a gente a curvar-se sob a superioridade do python. Está na altura de lhe fazer frente nos campos onde o c/c++ é forte! :P Ou seja: dimensão de código, velocidade, e ausência de interpretador. Pode ser um pouco mais complicado escrever um certo e muito específico tipo de algoritmos, mas a que custo?

Morre ? Porquê ?

Porque python é uma linguagem interpretada e c/c++ é compilada. Nunca uma linguagem interpretada pode ter aspirações a ser tão rápida como uma linguagem compilada.

Isto está a ficar off-topic, mas ainda assim... tentei aprender um mínimo de python para fazer um teste de velocidades entre python e c/c++, mas não consegui. Também não me esforcei muito... ::D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Morre ? Porquê ?

Porque python é uma linguagem interpretada e c/c++ é compilada. Nunca uma linguagem interpretada pode ter aspirações a ser tão rápida como uma linguagem compilada.

Isto está a ficar off-topic, mas ainda assim... tentei aprender um mínimo de python para fazer um teste de velocidades entre python e c/c++, mas não consegui. Também não me esforcei muito... ::P

Ok Obrigado por me escalreceres ... inda tá para vir o teste ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao é necessario testar,

c é uma das linguagens de programaçao mais rapidas*

sendo superado por assembly pois é baixo nível

phython, perl, bash script, csh é bom para fazer umas brincadeiras mas nao passa disso, perde em velocidade e nao é só isso.

c tem librarias para fazer tudo e mais alguma coisas e se alguem duvidas das potencialidades de c, basta pensar que unix foi quase inteiramente escrito em c

Vantagens:

- Rapidez

- Portável

- Popular

- Modular

- Livrarias muito poderosas

E como se não bastasse isso c ainda evoluiu para c++, que é por objectos

Aprender C é uma boa aposta pois depois é fácil passar para C++ ou mesmo PHP devido as syntax serem similares.

Claro que phython esta a crescer bem pois comparado com c é bastante mais simples.

------------

*como senao bastasse ser rapida ainda dispoe da libraria mpi que permite em maquinas que tenham varios processadores, dividir o tempo de processamento por eles.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Python não é assim tão lento como voçês dizem, e além disso não compares a complexidade de C com a facilidade e flexibilidade de Python. Além disso, caso precises de muita velocidade podes implementar código em C no meio do Python. Outra vantagem é ser multi plataforma, funciona em tudo: Linux, Mac e Windows, e suportar vários paradigmas. Se quiseres complicar também tem suporte para ser orientada a objectos.

A questão está na necessidade do utilizador, cada um deve utilizar cada linguagem para cada caso, pois nem todas as linguagens serão as mais adequadas em todas as circunstâncias.

Bem, não vou dar mais argumentos da vantagem do Python, mas tens muitos tópicos do teckV espalhados pelo forum.

Quanto ao código, depois de teres de ler milhares de linhas de código, diz-me se preferes Python ou C.  :cheesygrin:

atenção: não tou a menosprezar o C, é uma linguagem muito importante e que eu também estou a aprender, mas o Python rula muito! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

c é 'generical purpose'

serve para tudo.

e c é simples claro que tens que te empenhar nao aprendes em 2 tempos, mas depois de muitos anos nisto, programas em c como se tivesses a escrever pseudo-codigo

disseste que python é multi plataforma e C nao é?!

phython é porreiro porque é simples, agora C é uma linguagem de programaçao mais completa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço aos meninos para discutirem a diferenças do C e do python  noutro topico... em discusão de programação!!!!

Estão em off topico.... ok??  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

c é 'generical purpose'

serve para tudo.

e c é simples claro que tens que te empenhar nao aprendes em 2 tempos, mas depois de muitos anos nisto, programas em c como se tivesses a escrever pseudo-codigo

disseste que python é multi plataforma e C nao é?!

phython é porreiro porque é simples, agora C é uma linguagem de programaçao mais completa

sorry tofas, só vou dizer mais isto ;): o código de python corre em qualquer máquina sem qualquer mudança de código, enquanto C tens sempre de fazer algumas alterações.

além disso python é multi paradigma, suporta procedimental, modular, oo, e outros métodos. eu também curto C mas python faz o mesmo em menos linhas e mais simples. quanto a ser mais completa e ter mais librarias, olha que tens mesmo muita coisa para o python. Além disso Python serve de substituto ao PHP. Queres linguagem mais completa? :P

python tb te deixa programar com alguma complexidade.. depende da tua experiência. fiquem bem!  :D

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