Iniciante C/ Problema com Vetor

15 respostas
C

Oi Pessoal,
Sou nova aqui no fórum e gostaria muito de contar com a gentileza e ajuda de vocês.
Estou fazendo uma cadeira de algoritmo na faculdade e estou com dificuldade num exercício que segue abaixo:
Escreva um programa que crie um vetor (com 10 ocorrências), com números inteiros e aleatórios
entre 1 e 6.
Crie um segundo vetor (com 6 ocorrências) que deverá armazenar, na ocorrência
correspondente a cada número, quantas vezes este aparece no primeiro vetor.

Esse foi o codigo que fiz até agora… mas o segundo vetor não conta o conteúdo do primeiro.

Me ajudem… PLEASE !!!

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main()

{

clrscr();

int vet[10], vet2[6], i, j, cont=0;

randomize();
printf("\nNumeros sorteados entre 1 a 6:");
printf("\n\n");
for(i = 0; i < 10; i++)
{
	vet[i] = ((rand() % 6) + 1);
	printf("%d\t", vet[i]);
}

    printf("\n\n");
for(i = 0; i < 6; i++)
{
	for(j = 0; j < 10; j++)
	{
	      if(vet[i] == vet[j])
	      {
			cont++;
	      }
	      vet2[i] = cont;

          	      }
}

for(i = 0; i < 6; i++)
{
	printf("%3d\t", vet2[i]);
}

    getch();

}


15 Respostas

E

Tio, seu problema com contagens é de algoritmo, não de programação.
Além disso, nomes bons para as variáveis ajudam a programar melhor. vet1 e vet2 são nomes de clínicas veterinárias :). Use nomes como “entrada” e “contagem”.

Vamos fazer isso no papel, que ele aceita melhor as coisas.

Pra começar, vamos criar um vetor com 6 posições, e preenchê-las com 0.

0 0 0 0 0 0

A seguir, vamos percorrer o tal vetor de entrada ( 4 3 1 3 6 5 3 4 1 5 )
Pegamos o valor 4. Então incrementamos a 4a. posição do vetor de 6 posições (ou seja, o elemento [3]. Fica então:

0 0 0 1 0 0

A seguir, pegamos o valor 3. Então incrementamos a 3a. posição (o elemento [2]). Fica:

0 0 1 1 0 0

Vá fazendo isso até chegar ao final. Deve ficar algo como:

2 0 3 2 2 1

Que era o tal resultado esperado.

C

entanglement,

Pra começar é TIA,

Desculpa, mas acho que não leu o enunciado do exercício… Numeros aleatórios…

E não entendi o exemplo que tu deu… que tem problema de algoritmo é verdade… mas minhas variaveis acredito que mudar agora só iria me confundir mais, pois como coloquei no assunto no tópico sou uma mera iniciante.

Alguém que saiba explicar poderia me ajudar?

E

Dona Cris,

Desculpe eu não ter reparado que seu nome é Cristhiane Taís. É que normalmente eu desligo os avatares (por exemplo, nem sei se você usa um avatar ou não) e não vejo o nome até para ser o mais imparcial possível. Imagine se eu resolvesse não responder só porque o nick do rapaz é “satan665+1” ou coisa parecida :slight_smile:

Sim, eu sei que são números aleatórios.

Mas para você entender o algoritmo, eu usei aqueles números que você pôs naquela figura.

Pra começar, uma forma de resolver problemas é você quebrar o problema em pedaços. (O famoso método “Jack o Estripador”). A seguir, resolver cada pedaço separadamente, e depois (com um pouco de sorte), juntar os pedaços (às vezes fica igual a um Frankenstein, mas isso é outra história).

Então seu problema, por exemplo, pode ser quebrado em:

a) Gerar os números aleatórios (isso você deve ter feito direitinho, não vi seu código com muita atenção).
b) Zerar o vetor de contagens.
c) Efetuar a contagem dos números, como o algoritmo que mostrei acima.

E

Vou dar um exemplo de como você poderia resolver esse problema. (O meu compilador não tem conio.h , portanto talvez você tenha de corrigir alguma coisa ).
Só 2 minutos.

G

Olá Chris,

O entanglement irá resolver seu problema, esse site, eu acredito, deva ser muito útil a você como foi para mim: http://www.cplusplus.com/reference/clibrary/

[]'s

E
#include <stdio.h>
#include <stdlib.h>

void imprimir_vetor (const char* mensagem, int vetor[], int tamanho) {
    int i;
    printf ("%s\n", mensagem);
    for (i = 0; i < tamanho; ++i) {
        printf ("%d, ", vetor[i]);
    }
    printf ("\n");
}

int main (int argc, char *argv[]) {
    int aleatorios[10];
    int contagem[6];
    int i;
    int n;
    
    srand (time(NULL)); 
    /* Sortear os numeros */
    for (i = 0; i < 10; ++i) {
        aleatorios[i] = rand() % 6 + 1;
    }
    /* Imprimir os numeros sorteados */
    imprimir_vetor ("Numeros Sorteados", aleatorios, 10);
    /* Fazer a contagem. Primeiramente, devemos limpar o vetor "contagem" */
    for (i = 0; i < 6; ++i) {
        contagem[i] = 0;
    }
    /* Agora, devemos lembrar que cada elemento do vetor "aleatorios" vai de 1 ate 6. */
    /* Vamos fazer a contagem, lembrando que */
    /* contagem[n-1] = numero de vezes que o valor n aparece no vetor "aleatorios". */
    for (i = 0; i < 10; ++i) {
        n = aleatorios[i];
        contagem [n-1] = contagem[n-1] + 1;
    }
    /* Imprimir a contagem dos numeros */
    imprimir_vetor ("Contagem dos numeros sorteados", contagem, 6);
}

O lugar onde você usou “randomize” eu usei “srand (time (NULL))”, mas é porque meu compilador não tem conio.h. Esteja à vontade para mudar.

C

entanglement

Desculpa se fui ríspida demais (e sei que fui). Mas só queria uma explicação que eu entendesse e não algo como se eu tivesse que nascer sabendo… como se fosse uma obrigação. Como disse, estou engatinhando na linguagem C e em algoritmos, e por vezes, quando necessito de uma explicação, seja de professor, seja de alguém que já programa, estas pessoas acham tão bobas minhas dúvidas que me acho uma estúpida. Não sei se isso é normal… Mas vou ter que aprender a lidar com isso.

Bom, quanto ao código… Era isso mesmo e tinha razão quanto as variáveis também. Ficaram muito melhores de entender. :shock:

Deu certinho. Eu já tinha feito o código com esta linha:
contagem [n-1] = contagem [n-1] + 1;

Porém tentei zerar o cont do meu codigo e incremetando ele… o que não deu certo.

Não sei se me fiz entender…

Muito obrigado de coração… Passei uma semana fazendo esta pergunta a programadores que não me explicavam nada… Quase arrancando meus cabelos… pq quando não consigo resolver até o sono perco… heheh

C

getAdicted

Já estou entrando no site e colocando nos meus favoritos…

Pretendo seguir meus estudos e assim que melhorar em algoritmos pretendo começar a estudar outra linguagem: Java? PHP?

Ainda não sei. Aceito conselhos…

Abraço aí… :roll:

E

Na faculdade não dão Java não? Eu sou do tempo que Pascal era novidade, mas hoje em dia Java é quase onipresente nas faculdades.

C

Algoritmo é C.
Java acho que só em estrutura de dados talvez. Só mais para frente…
E nas férias já quero começar a estudar algo mais, apesar de gostar bastante de C.

Tenho alguns livros de PHP em casa… Mas dizem que Java é mais promissor.

G

Oi Cristhiane

Você não é estúpida, suas dúvidas não são bobas. Você é uma iniciante com dúvidas de iniciante, só isso. O problema é que tem muita coisa pra se aprender em muito pouco tempo daí a matéria acaba sendo enfiada goela abaixo, você que se lasque pra aprender/acreditar no que está sendo dito. :cry:
Normal esse tipo de atitude não é mas acabou se tornando comum principalmente na internet.

S

Oi Cris!

Provavelmente você vai ter Programação Orientada a Objetos em Java

Eles usam C para Algoritmos para o aluno não se perder nos conceitos de orientação a objetos e sim na lógica de programação. E pra isso, uma linguagem estruturada com o C é melhor.

Abraço!

E

sidzuza:
Oi Cris!

Provavelmente você vai ter Programação Orientada a Objetos em Java

Eles usam C para Algoritmos para o aluno não se perder nos conceitos de orientação a objetos e sim na lógica de programação. E pra isso, uma linguagem estruturada com o C é melhor.

Abraço!

Se bem que nada impede o professor de começar direto com Java só que usando um monte de “static” pra lá e pra cá - se fizer isso, um programa Java fica igualzinho a um programa C, exceto pelo fato que você ainda é obrigado a alocar arrays com new em Java - infelizmente, não dá para escrever um programa em Java sem um único “new” se você tiver arrays no meio.
Uma coisa que acho terrível em C é que você fica brigando muito com bugs que simplesmente travam seus programas, e você fica sem absolutamente pista nenhuma para resolvê-los (nada de stack trace, etc.)
Isso é intolerável, em minha opinião.

S

Fala entanglement!

Então, eu disse pois comigo foi assim. Tive C em algoritmos mas não nos aprofundamos na linguagem. Os problemas que você citou não cheguei a ver, mas acredito que seja como disse.

Concordo em relação ao Java, mas aí confundiria legal a cabeça do aluno quando chegasse na linguagem Java de fato. E realmente o new do array ia quebrar as pernas :lol:

Abraço!

C

entanglement:
sidzuza:
Oi Cris!

Provavelmente você vai ter Programação Orientada a Objetos em Java

Eles usam C para Algoritmos para o aluno não se perder nos conceitos de orientação a objetos e sim na lógica de programação. E pra isso, uma linguagem estruturada com o C é melhor.

Abraço!

Se bem que nada impede o professor de começar direto com Java só que usando um monte de “static” pra lá e pra cá - se fizer isso, um programa Java fica igualzinho a um programa C, exceto pelo fato que você ainda é obrigado a alocar arrays com new em Java - infelizmente, não dá para escrever um programa em Java sem um único “new” se você tiver arrays no meio.
Uma coisa que acho terrível em C é que você fica brigando muito com bugs que simplesmente travam seus programas, e você fica sem absolutamente pista nenhuma para resolvê-los (nada de stack trace, etc.)
Isso é intolerável, em minha opinião.

entanglement,

Concordo plenamente contigo sobre os bugs do C, é um saco e por vezes perco um tempão tentando resolver algo no algoritmo que tenho que adivinhar, ou seja, fico tipo cachorro correndo atrás do próprio rabo, quando isso acontece, geralmente desestruturo todo meu código, ou seja, me perco completamente.

Agora já estou tirando isto de letra.

Outra dificuldade são os compiladores, gosto do DEV, porém vários comandos não funcionam no DEV, o que me causa problema, já que em aula usamos o Turbo C (que não é nada pratico visualmente).

Está sendo legal ler as opiniões de vocês, pois já rodei nesta cadeira em outro semestre, pelas mesmas dificuldades e acabei desistindo dela. Mas desta vez não posso rodar, pq esta cadeira está me trancando pra outras e, ainda mais, estou adorando, mas sinto muito dificuldade em vetores e não sei se é normal ou eu que sou devagar mesmo, pois várias pessoas me dizem que desenvolvedor tem facilidade nisso…

O que acham?

Abraço

Oi

Criado 17 de novembro de 2010
Ultima resposta 22 de nov. de 2010
Respostas 15
Participantes 5