Boa sorte :)
1
2
3
4
## Acredito que não terei tempo para postar aqui um pseudocódigo essa semana.
## Espero que vocês consigam fazer muito bem esse aqui!
## Ele não é difícil, é só necessário entender como funciona ordenação e seu al-
## gorítimo e implementar usando seu lab8 :D
aqui estão algumas perguntas que foram perguntadas e respondidas. Foram respondidads de forma informal e sem uma revisão do texto! qualquer erro a culpa é sua?
“Eu não entendi como fazer essa leitura e de que maneira vou “guardar” n números em um vetor.”
primeiramente, tente ler um único número e colocá-lo em um vetor com 30 posições. um jeito de fazer é ler o número como uma string, criar um vetor de inteiros e passar esse número para esse vetor de inteiro. o jeito de fazer isso é usar aquela tabela ascii. (inteiro_daquela posição = string[posição atual) - ‘0’)
ex: Foi passado para você o número 19 String:->[1][9][\0] você deve passar esse número para o vetor de inteiros do seguinte modo: preenche todas as posições (aqui, no caso, o número pode ter 30 caracteres, então será um vetor com 30 posições) com 0 e coloca o número o mais a direita possível:
Inteiros:-> [0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][1][9]
depois que você ver que está tudo imprimindo certinho, para armazenar todos os números passados no laboratório 16, crie um vetor de inteiros de modo que cada linha do vetor será um vetor de 30 inteiros, mais ou menos assim:
0-[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][1][9]
1-[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][8][7][5][1][4]
2-[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][2][3][0][0][1][7]
(…)
ou seja : mat[Valor_MAX_de_N][30]
fica claro que para ler os números é só fazer um loop até n repetindo a leitura feita do lab 8?
“Não entendi como faço para passar o valor salvo na string para um vetor de inteiros”
Então, você precisa saber o tamnho (tam) do número e “jogar” ele para o “fundo” do vetor de inteiros.
Então a primeira posição (pos = 0) que no no exemplo tem o valor [1] deve ir para a posição 28, que é 30-tam+pos
então voce deve primeiro zerar todo o vetor de inteiros (percorre ele inteiro colocando em todas as suas posiçõe o número 0)
deve ficar mais ou menos assim (talvez a formula mude um pouco, não sei)…
for(i = 0; i < tam; i++){
vet[30-tam+i] = string[i]
}
Já construi a parte do meu programa que faz a leitura dos n números, coloca zeros a esquerda, passa esse vetor para uma linha de uma matriz e imprime essa matriz com a ordem que foram digitados. Minha dúvida é em como ordenar as linhas dessa matriz… Mas não sei como fazer a ordenação das linhas dessa matriz. Não consegui entender a função compara, ela iria comparar as linhas da matriz? Como coloco a matriz como parametro para comparar apenas o valor cheio da linha?
você deve tratar cada uma das linhas como um único número. No lab 14, por exemplo, existiam matrizes de caracteres em que cada uma das linhas dessa matriz era uma palavra.
para ordenar você pode escolher qualquer um dos algorítimos, mas é importante ver quais são as operações que esses algoritimos fazem.
este é o código do professor para ordenar um único vetor com o Selection Sort (cada um dos números nesse vetor é realmente um número, no seu caso, você terá uma matriz[A][B] para que cada 0 <= x <= A é um único número, então você não pode mexer nele)
void selectionSort(int vet[], int tam){
int i, j, min;
for(i=0; i<tam; i++){
min = i;
for(j = i+1; j<tam; j++){//Acha posicao do menor elemento a partir de i
if(vet[min] > vet[j])
min = j;
}
troca(&vet[i], &vet[min]);
}
}
veja que temos uma comparação (vet[min] > vet[j]
`), então você precisa implementar a operação comparação para o seu bignum (a vetor de números). Como implementar? Crie uma função! No proprio enunciado ele ja te ajuda com essa ideia de criar essa função!
int compara(int n1[30], int n2[30]);
você deve fazer uma função que recebe duas linhas da matriz, ou seja, recebe um vetor, e compara qual deles é menor/maior/igual (leia o enunciado e implemente a função do jeito que ele fala). É relativamente fácil fazer essa função. Comece comparando a posição mais a esquerda do número, quem tiver o valor maior é o maior número
n1: [0][0][2][3][4][5]
n2: [0][1][2][3][4][5] <- maior por que [1] na posição n2(1) é maior que [0] na posição n1(1)
e veja que você também tem a função troca, que no caso, foi implementada para trocar um número com outro. No seu caso, essa função troca tem trocar um vetor (linha da matriz) com outro! o jeito mais ‘facil’ de fazer isso é fazer assim:
void troca(int n1[30], int n2[30]){
int aux[30]
//copia com um loop todos os números do vetor n1 para aux
//copia com um loop todos os números do vetor n2 para n1
//copa com um loop todos os números do vetor aux para n2
}
dai é só usar essas duas funções no algoritmo de ordenação!
cd Documents/lab16
). Quando estiver dentro do diretório, rode o seguinte código:
gcc lab16.c lab16_main.c -o lab16
./lab16
5.O testador é um script criado pelo professor Zanoni, disponível em sua página. Aqui é apenas um miniguia de como utilizar. Ele é muito bom pois já compila e testa seu código com os testes abertos do susy. Aconselho a usá-lo
cd Documentos/lab16
).chmod a+x testador.sh
./testador.sh mc102ij 16