Jump to content
Fórum Script Brasil
  • 0

PROGRAMA VETORES


roccoC/C++

Question

Progrma Vetores Vem mostrando aos iniciantes em linguagem c como declarar, inicializar e utilizar

um conjunto de strings e de dígitos, armazenados numa variável para vetor, e isto eu mostro na prática.

Note que estes dígitos referido são os salários dos profissionais citados no vetor de string, Note também que eu

os declarei como global, sendo assim, é permitido o uso em qualquer outra parte do código, inclusive sub - algorítimos.

Este programa é simples más me custou muitas horas para deixá - lo funcionando perfeitamente como está.

Você verá algumas linhas em comentários, deixei assim de propósito para que o leitor programador possa está fazendo

testes em seus códigos. A IDE usada foi Visual Studio 2010 Ultimate, que apresentou 3 warnings, habituais, no eclipse, também

foi testado e rodou liso, leso e solto sem nenhum impedimento, portanto aproveite bem o código que é 100% funcional

como todos os outros que aqui postei, aliás só posto o que sei fazer, e o que sei fazer, compartilho com todos os amantes de linguagem c.

"Como não sabia que aquilo era impossível de fazer, foi lá e fez."

http://codigosfontes-ccplus-plus.blogspot....ma-vetores.html

Edited by roccoC/C++
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Boa tarde!

Legal o seu programa. Como eu já te falei, ótima iniciativa divulgar programas prontos! Com certeza ajuda muitos... :)

Eu queria fazer alguns comentários sobre o seu programa. Existem pontos que você podia melhorar ele.

Inicialmente com relação à declaração dos vetores. O seu programa declara 4 vetores:

char String1[] [66] = {"Uma Empresa Construtora resolveu aumentar os salários de alguns"};
char String2[] [55] =    {"Profissionais em 10%, tecle Enter para ver como ficou:"};
int Salario[5] [5] = {{900},{1200},{1500},{1700},{1900}};
char Profissionais[][22] = {"Ajudante", "Pedreiro", "Carpinteiro", "Armador", "Telhadista", " Salários Atuais","Salários Atualizados", "Tecle Enter", "PROGRAMA VETORES" };
Todos seus vetores foram declarados com duas dimensões, ou seja, têm dois pares de colchetes. Isso significa que eles são listas de vetores. Por exemplo:
int Salario[5] [5] = {{900},{1200},{1500},{1700},{1900}};
Você definiu que Salario será 5 listas com 5 itens cada. Durante o seu programa você usa apenas Salario[0] e Salario[1]. Assim você tem 3 itens em cada Salario que não são utilizados e podem ser descartados. Portanto seu programa poderia declarar Salario assim:
int Salario[5] [2] = {{900},{1200},{1500},{1700},{1900}};
Outra coisa que você fez é declarar vetores sem dimensão como no caso de:
char String1[] [66] = {"Uma Empresa Construtora resolveu aumentar os salários de alguns"};
Isso significa que, o tamanho do vetor declarado como [] será definido pelo número de itens utilizados na inicialização. Como a sua inicialização passa apenas 1 item (o texto entre chaves), então será um vetor de apenas 1 elemento. Assim não há necessidade de declarar esse vetor com duas dimensões. Além disso, a dimensão informada ([66]) refere-se ao tamanho da string e é complicado ficar contando as letras para saber o que colocar. Para evitar isso, pode ser utilizada o recurso de não definir a dimensão do vetor nesse caso, ficando assim:
char String1 [] = "Uma Empresa Construtora resolveu aumentar os salários de alguns";
O mesmo pode ser feito para String2. Para profissionais você também usou o recurso de não definir o tamanho de uma dimensão porém ainda existe o problema de definir o tamanho para caberem as letras das strings, além do nulo no final. Isso pode te gerar problemas! O ideal é que você definisse a dimensão que informa o número de itens e deixar o tamanho das strings sem dimensão. Assim poderia declarar da seguinte forma:
char Profissionais[9][] = {"Ajudante", "Pedreiro", "Carpinteiro", "Armador", "Telhadista", " Salários Atuais","Salários Atualizados", "Tecle Enter", "PROGRAMA VETORES" };
Mais uma coisa: o ideal é que você declare um outro vetor para os textos no final desse array. Se você quiser aumentar uma profissão iria te dar bastante trabalho pois ia ter acertar a posição dos textos "Tecle Enter" e "PROGRAMA VETORES" no programa ou colocar a profissão depois desses textos, o que também daria trabalho pois o for ia exibir os textos como profissões. Finalmente: o seu for que exibe as profissões na verdade não está fazendo o loop. Ele já retorna falso na segunda passagem! Assim ele não tem utilidade. E internamente ao for você está duplicando as chamadas a printf e incrementando o i, variável do for. Assim você poderia mudar o código para que o for fizesse o loop, evitando a duplicidade. O loop ficaria assim:
for (i = 0; i < 5; i++){    // Este for percorre cada posição na matriz Salario e permite que printf imprima seus valores
        Sleep(800);
        gotoxy(8,8+(i*2));
        printf("%s         %d\t\t   %d\t\t\t%d", Profissionais [i], Salario[i] [0], Salario[i] [1], Salario[i] [0] + Salario[i] [1]);
    }

    textcolor(LIGHTGREEN);gotoxy(33,20);  printf("%s", Profissionais [7]);
    gotoxy(33,21);

Perceba que usei o i como índice de Profissionais também.

Eu também usei o i para calcular o valor de y. Como a cada aumento em i tinha que aumentar y em 2, multipliquei i por 2 e somei 8, gerando o resultado esperado.

Espero que meus comentários tenham te ajudado! :)

Abraços,

Marcelo Utikawa da Fonseca

Link to comment
Share on other sites

  • 0

Ola, boa tarde, você errou nestas linhas sujeridas:

char Profissionais[9] = {"Ajudante", "Pedreiro", "Carpinteiro", "Armador", "Telhadista", " Salários Atuais","Salários Atualizados", "Tecle Enter", "PROGRAMA VETORES" };
Não sei onde você compilou, más aqui no Visual Studio 2010 ultimate e no eclipse não compila. Erro mostrado no eclipse: inicializadores demais para 'char [9] "main.cpp / main / src linha 7 C / C + + Problema. // Traduzido Erro mostrado no Visual Studio 2010: Erro 1 erro C2078: também inicializadores muitos C: \ Users \ Samuel Lima \ documentos \ Visual Studio 2010 \ Projects \ principal \ principal \ main.cpp 7 // Traduzido Ignorando esta declaração sujerida por você:
char Profissionais[9] = {"Ajudante", "Pedreiro", "Carpinteiro", "Armador", "Telhadista", " Salários Atuais","Salários Atualizados", "Tecle Enter", "PROGRAMA VETORES" };
e usando a original que eu usei:
char Profissionais[][22] = {"Ajudante", "Pedreiro", "Carpinteiro", "Armador", "Telhadista", " Salários Atuais","Salários Atualizados", "Tecle Enter", "PROGRAMA VETORES" };
O programa Compila, más trava na execução, e os erros estão relacionados as outras sujestões que você passou:
char String1 [] = "Uma Empresa Construtora resolveu aumentar os salários de alguns";
Note a falta das chaves para início e fim, E onde você disse que no caso O mesmo pode ser feito para String2. Você Também disse que o meu for não esta fazendo loop, e que não está servindo para nada, então ignore ele e compile o programa para você ver o que acontece:
//for (i = 0; i < 1; i++){    // Este for percorre cada posição na matriz Salario e permite que printf imprima seus valores

//}
Na minha opinião correta você só acertou nesta linha sujerida:
int Salario[5] [2] = {{900},{1200},{1500},{1700},{1900}};
Assim eu havia declarado:
int Salario[5] [5] = {{900},{1200},{1500},{1700},{1900}};

E como sou educado e gosto do que é certo vou editar o código colocando esta sua sujestão correta.

Me desculpe más seus comentários não ajudaram em nada.

ABRAÇOS.

Edited by roccoC/C++
Link to comment
Share on other sites

  • 0

Olá rocco

Eu não havia compilado pois em casa eu uso apenas o linux para programar. Por isso que poderia haver algum engano como realmente houve.

No vetor Profissionais eu havia dito para ser Profissionais[9][] e não apenas Profissionais[9]. De qualquer forma o correto seria *Profissionais[9] ou mesmo *Profissionais[]. Isso acontece pois me esqueci que apenas a primeira dimensão pode ser indefinida. Normalmente eu uso ponteiros como eu falei agora então por isso que me confundi.

Quanto às minhas outra recomendações, estão corretas.

Sobre String1 e String2: as chaves não são necessárias. Você utilizaria as chaves apenas se fosse colocar caracter por caracter como abaixo:

char String[] = { 'r', 'o', 'c', 'c', 'o', 0 };
Se for atribuir a string diretamente, não precisa. Talvez o erro que ocorreu com String1 e String 2 é que, como passou a ser um vetor simples, você deveria ter alterado seu printf de:
textcolor(LIGHTBLUE);gotoxy(8,10);  printf("%s", String1 [0]);
    textcolor(LIGHTBLUE);gotoxy(8,11);  printf("%s", String2 [0]);
Para:
textcolor(LIGHTBLUE);gotoxy(8,10);  printf("%s", String1 );
    textcolor(LIGHTBLUE);gotoxy(8,11);  printf("%s", String2 );
Sobre o for, realmente não faz loop. Veja seu for:
for (i = 0; i < 1; i++){

Você inicializa o i com zero e fala para ocorrer o loop enquanto i for menor do que 1, ou seja, executa apenas 1 vez.

O erro que você comentou que ocorre se tira o for é que, quando você comentou ele, a variável i deixou de ter seu valor carregado em zero e esse é que foi o problema.

Retire o for mas carregue zero em i e verá que funciona normalmente...

E como eu disse, são recomendações para melhorar seu programa.

Se não ajudei, desculpe!

Abraços,

Marcelo Utikawa da Fonseca

Link to comment
Share on other sites

  • 0

é, não ajudou, programo assim, assim aprendi, nunca entrei em forum algum pedindo ajuda

me viro sozinho por aqui, eu e Deus, e meus códigos são 100% funcionais. Antes de você fazer comentários

procure ter certeza absoluta no que você escreve, eu me responsabilizo pelo que posto, não sou de blá -blá -blá,

e não colo pesquisa de internet, posto o que sei, e o que posso provar.

Estive ontem muito ocupado preparando um novo código,

e acredito que ele é ainda melhor que este, em breve estarei postando.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...