>> ZAMYLA CHAN: Parabéns en rematar o seu
primeiro par de programas en C.
Sei que a súa primeira incursión no Sintaxe C pode ser asustado.
Pero asegura-lle, ao final do Por suposto, vai ser capaz de ollar para o
primeiro par de competencias e completa-las en poucos minutos.
>> Agora que está quedando máis familiarizado coa sintaxe, imos comezar a César.
En César, o usuario deberá presentar un clave número enteiro como unha liña de comandos
argumento, a continuación, escriba unha chaira mensaxes de texto na ventá.
O programa pode entón cifrar o texto e impresión
súa mensaxe de texto cifrado.
>> Cifraxe de César é moi sinxelo.
Desprazar cada letra, na súa texto, pola chave.
Como resultado, é tamén moi inseguro.
Pero a implementación César introducirá nos ASCIIMath e matriz de datos
estruturas.
Nós imos chegar a máis complexa cifras posteriores.
Cunha clave de César de 2, letra A en texto sería representado por
letra C en texto cifrado, por C é de dúas letras tras A. B sería
representado por D e C por E. Rumbo a fin do alfabeto, W é
representado por Y e X, Y Z. Pero Non ten dúas letras para logo, de xeito
as cifras implica o alfabeto.
Y en texto simple é, polo tanto, representado por Un de texto cifrado, e Z por B. Pode
axudar a ver a César como Cypher unha roda alfabeto continua.
>> Para codificar o seu texto, o usuario entrará dous argumentos
na liña de comandos -
. / Caesar seguido por unha chave.
Como sempre, non podemos confiar en que o usuario completo para entrar entrada que facer
sentido para o noso programa.
Entón nós imos ter que validar a súa entrada de liña de comandos.
>> En vez de usar int void main, estamos usar int main, argc int, cadea argv.
O argc variable enteira representa o número de argumentos pasados ​​para
na liña de comandos.
E argv é un array, ou pensar nel como unha lista, dos argumentos pasados ​​dentro
>> Así, para César, como é que imos validar entrada do usuario?
Ben, eles só deben estar entrando dous argumentos de liña de comandos -
. / Caesar e unha clave.
Entón, se non é argc 2, o que significa que ou eles esqueceron a clave e só
entrou. / Caesar, ou entrou varias claves.
>> Se este é o caso, entón vai quere imprimir instrucións
e saír do programa.
Eles van ter para tentar de novo a partir da liña de comandos.
Pero aínda se argc é 2, vai que comprobar se
darlle unha clave válida.
Para Caesar, precisa un número enteiro.
Pero argv é unha matriz de cadeas.
Como accede a clave?
>> Un rápido ollar para as matrices -
estruturas de datos que posúen múltiple Os valores de datos do mesmo tipo.
As inscricións son con índice cero, o que significa que o primeiro elemento é o índice cero
e este último elemento é o tamaño do índice menos 1, en que tamaño é o número de
elementos na matriz.
>> Se eu declarei unha nova caixa de correo matriz de cadea de lonxitude 3, visual, el
coma este.
Tres recipientes para cordas , De xeito conxunto.
Para acceder a calquera elemento, escribe o nome da matriz e logo, indican
o índice entre corchetes.
Aquí, vou asignar un valor a cada elemento, así como eu faría calquera
outra variable cadea.
>> Entón, para acceder os nosos argumentos de liña de comandos, todo o que temos que facer é acceder
o elemento de dereito da matriz argv.
Se o usuario entrou Team. / Decolagem Foguete no terminal, argv 0 sería
ser. / despegamento.
argv sería Team, e arg2 sería foguete.
>> Agora que podemos acceder a nosa chave, aínda temos que facer
seguro de que é correcta.
Necesitamos convertelo en un número enteiro.
Pero non podemos só lanzar como fixemos anteriormente.
Por sorte, para a función A Y coida isto para nós, e mesmo retorna 0
a cadea non se pode converter a un número enteiro.
Correspóndelle a vostede, con todo, para dicir o usuario por que non vai
que o programa continuar.
Gardar o resultado dun de Y nunha enteiro, e alí ten a súa clave.
A seguinte parte é simple.
Solicitar ao usuario o texto simple, que será de datos tipo cadea.
Por sorte para nós, todos os usuarios inseridos cordas son válidos.
>> Agora que temos todos os medios necesarios do usuario, é tempo para nós
codificar a mensaxe.
O concepto de César é simple o suficiente para entender.
Pero como é que o ordenador sabe que letras vir despois do outro?
>> Aquí é onde a táboa ASCII vén dentro
Cada personaxe ten un número enteiro número asociado a el.
A capital é 65.
Capital B é 66.
Minúsculas un é 97.
Minúsculas b é 98.
Pero os personaxes non se limitan para só números alfabéticos.
Por exemplo, o símbolo @ 64 é o número ASCII.
>> Antes de xestionar toda a corda, imos finxir que nós só temos que cambiar
un personaxe.
Ben, nós só queremos cambiar real letras no texto simple, non
caracteres ou números.
Entón o primeiro que imos querer comprobar é se o personaxe está en
alfabeto.
>> O isalpha función fai isto para nós e devolve un valor booleano -
verdadeiro se os personaxes é unha carta, falso en caso contrario.
Outras dúas funcións útiles son isupper e islower, con
nomes auto-explicativos.
Eles retornan certo se o carácter dado é maiúscula ou minúscula,
respectivamente.
Xa que son booleanos, son útil para usar como condicións.
>> Se isalpha retorna certo, vai ter para cambiar o personaxe pola chave.
Entón, imos abrir o ASCIIMath e facer un pouco de matemáticas ASCII.
O uso é moi semellante ao do uso a César e leva nunha clave no
liña de comandos.
>> Se eu executar ASCIIMath 5, parece engadir Cinco a un, dándome a letra f, e
mostrando o valor ASCII.
Entón, imos dar un ollo no programa.
>> Pode preguntar, aquí, por carta é un número enteiro, cando está
claramente, tamén, unha carta.
Acontece que os personaxes e enteiros son intercambiábeis.
Ao poñer a letra A en un único comiñas, o enteiro pode almacenar
o valor ASCII do capital A. Teña coidado, porén.
Debe das roupas simples.
Sen as comiñas simples, o compilador estaba a buscar unha variable
chamado A, e non o personaxe.
>> Entón eu podo engadir carta e unha clave, almacenando o suma das variables int resultado.
Aínda resultado é do tipo de datos enteiro, a miña declaración printf utiliza o
% C espazo reservado para os personaxes.
Así, o programa imprime o carácter relacionado co resultado enteiro.
E xa que impreso o número enteiro forma ben usando% d vemos
o número ben.
Entón, agora pode ver que nós tratar personaxes e
números enteiros, e viceversa.
>> Imos proba fóra ASCIIMath algúns máis veces a usar 25 como unha chave.
Estivemos coa letra z.
Agora imos tratar de 26.
Queremos chegar a letra a, mais en vez diso temos un soporte esquerdo.
Entón, obviamente, só engadindo o clave para a carta non vai facer.
Necesitamos descubrir unha fórmula para embrulhar todo o alfabeto, como o noso
exemplo, no inicio fixo.
>> A fórmula para o César cambio é como segue.
c é igual p máis k modulo 26.
Lembre que modulo é un instrumento útil operación que nos dá a restante
de dividir un número por outro.
Imos aplicar esta fórmula para a chaira carta de texto con unha chave de 2.
O valor ASCII y é 89, que ofrécenos 91 modulo 26,
o que equivale a 13 -
definitivamente non é o valor ASCII de a, que é 67.
>> Humor me agora e afastarse do Os valores ASCII para un índice alfabético
onde A é cero e Z é 25, o que significa que Y é 24.
24 + 2, módulo 6, dános 26, modulo 26, 0, que é o
índice alfabético de un.
Polo tanto, esta fórmula parece aplicarse ao índice alfabético de carta e
non o seu valor ASCII.
>> Pero comeza cos valores ASCII.
E para imprimir o carácter cifrado, vai ter o seu valor ASCII tamén.
Correspóndelle a vostede, entón, para descubrir como cambiar e cara atrás.
>> Despois de descubrir a fórmula correcta a un personaxe, o único que hai que facer
aplicarse a mesma fórmula para cada letra no texto -
só se a letra está en orde alfabética, claro.
E lembre de que precisa para preservar o caso, superior ou inferior, que é onde
as funcións IsLower isupper e mencionado anteriormente virá a cadra.
Pode ter dúas fórmulas -
un para maiúsculas e un para minúsculas.
Entón isupper un eMinusculo pode axudar determinar a fórmula que se aplica.
>> Como aplica a fórmula para cada único carácter nunha cadea?
Ben, unha cadea é só un matriz de caracteres.
Así, pode acceder a cada personaxe, agrupación sobre cada personaxe do
cordas en un loop for.
En canto á condición de loop for, a función strlen, pola corda
lonxitude, virá a cadra.
Leva nunha cadea como entrada e devolve a lonxitude desta corda.
Asegúrese de incluír a biblioteca dereita para utilizar a función lonxitude da corda.
>> E aí tes o texto cifrado.
O meu nome é o Zamyla.
E [CODE falando].