Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

happyZeBra

Exercicio Vetores C

Mensagens Recomendadas

happyZeBra

Boas noites.

Neste exercício tenho de criar uma funçao que recebe dois vetores por argumento, um de caracteres e outro de inteiros. O objectivo é escrever no ecrã cada elemento do vetor de caracteres (um caracter), repetindo-o um nº de vezes igual ao valor inteiro guardado no elemento correspondente do vetor de inteiros.

Exemplo:

int VC[5] = {'a', 'b', 'c', 'd', 'e'};

int VI [5] = {1,2,3,4,5};

Output deveria ser:

a

bb

ccc

dddd

eeeee.

A minha tentativa de codigo (nao muito feliz) foi:

void func(char vc [], int vl [], int n){
int i;
for (i = 0; i <= n; i++){
while (i <= vl[i]){
printf("%c", vc[i]);
i++;
}

}
}

Se alguem me puder ajudar a compreender o que esta errado seria optimo :)

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

O enunciado pede uma função com dois argumentos: eu vejo 3 argumentos.

Não entendo o propósito do primeiro ciclo for e as voltas que o i está a dar.

Conselho: esquece esse código e recomeça. Tu não estás longe da solução, mas ao mesmo tempo estás longe porque introduziste um n e andas a dar voltas com o i entre dois ciclos.

O objectivo é repetir vl vezes o caracter vc, certo? Então não precisas de mais nada, apenas variáveis iteradoras para os ciclos.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
happyZeBra

Sim ja tinha reparado, aquele "n" seria a dimensao de ambos os vetores!

Em relaçao ao "i", e verdade que ando ali as voltas e que esta deveras confuso o codigo, ate porque basta tirar o "i++;" e da me ciclo infinito :/

Vou tentar de novo :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Não uses um terceiro argumento, determina isso dentro da própria função. Mais, podes ter o cuidado de determinar qual dos vectores é menor, pois se eles tiverem tamanhos diferentes vais ter erros.

#define COUNT_ELEMS(x) (sizeof(x) / sizeof(x[0]))

int min(int a, int b) {
  return (a<b) ? a : b;
}

void func(char vc[], int vl[]) {
  int elems = min(COUNT_ELEMS(vc), COUNT_ELEMS(vl));
  // código
}


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Não uses um terceiro argumento, determina isso dentro da própria função. Mais, podes ter o cuidado de determinar qual dos vectores é menor, pois se eles tiverem tamanhos diferentes vais ter erros.

#define COUNT_ELEMS(x) (sizeof(x) / sizeof(x[0]))

int min(int a, int b) {
  return (a<b) ? a : b;
}

void func(char vc[], int vl[]) {
  int elems = min(COUNT_ELEMS(vc), COUNT_ELEMS(vl));
  // código
}

isso não é verdade ... a brincadeira de usar o sizeof de um array só funciona na função de declaração do array

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

void test(int S[]) {
   printf("test : %ld\n", sizeof(S)); // 4 em maquinas 32 bits, 8 em maquinas 64 bits
                                      // isto porque int S[] é um ponteiro e não um array
}

int main() {
   int S[] = {1, 2, 3};

   printf("main : %ld\n", sizeof(S)); // 12 em maquinas 32 bits, 12 em maquinas 64 bits
                                      // porque é sizeof(int) * 3 = 4 * 3 = 12
                                      // isto porque sim, S é um array

   test(S);

   return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
happyZeBra

Em relaçao ao tamanho, de inicio estou a assumir que ambos tem o mesmo tamanho.

em relaçao ao codigo nao estou a conseguir, eu estou a entender o erro(penso eu), que esta na maneira como estou a incrementar o "i", mas nao sei se e por ja estar cansado, nao la estou a chegar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
happyZeBra

Bem, hoje de manha ja com cabeça fresca voltei a tentar e penso que acertei logo na primeira, realmente bloquiei numa coisa que seria simples.

void func(char vc [], int vl []){
int i,j;
for (i = 0; i < TAM; i++){
    for (j = 0; j < vl[i]; j++)
       printf("%c\t", vc[i]);
   }
}

o TAM é uma constante definida com valor 5.

o output saiu como deveria :) algo que deva mudar ou melhorar ?

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.