>> [Música tocando]
>> ZAMYLA CHAN: Prefire recibir 10 millóns de dólares agora ou recibir
tostões todos os días do mes, cando cada día posterior, que obtén
dobrar a cantidade de moedas que recibida o día anterior?
En tostões, imos probar por que ten que
asumir definitivamente os tostões.
A súa tarefa é escribir pennies.c--
un programa que pide ao usuario como primeiro Hai moitos días no mes e
entón pregunta cantos centavos o usuario vai recibir, o primeiro día.
O programa debe entón calcular a importe que o usuario terá
acumulado ao final do mes e amosar-lo.
>> Podemos dividir este programa para un par de tarefas.
Imos ter para solicitar múltiples entradas de usuario -
días e meses, e moedas de un centavo o primeiro día.
Necesitamos manter o control de canto diñeiro o usuario ten e actualiza-lo cada
día, dobrando a cantidade de tostões que reciben.
E, finalmente, imprimir o seu total final, en dólares.
>> Imos atacar a entrada do usuario en primeiro lugar.
Vou abrir apples.c, programa curto, que trata
con entradas e saídas.
Na parte superior aquí, eu incluín algúns das bibliotecas que eu teño -
Biblioteca de CS50 e un patrón I / O da biblioteca.
Eu imprimir unha ventá utilizando o función printf do
biblioteca estándar de E / S.
Pero o impulso efectivo do usuario ocorre na seguinte liña con este
Función GetInt na biblioteca CS50.
>> GetInt obtén a entrada do usuario e asegura que a entrada é un número enteiro.
Entón eu gardar a entrada do usuario no integer i, subtraia 1 do i, e, a continuación,
imprimir o novo valor se i.
Despois de compilar apples.c mediante o mando "facer mazás," Eu teño unha
mazás arquivo executábel.
Execución que, eu vou entrada 1.
O programa dime que Teño 0 mazás esquerda.
E así que funcionou como se esperaba.
>> Entón, imos realizar este novo e unha entrada negativa.
Agora, tendo un valor negativo de mazás non ten moito sentido, pero
o programa acepta-lo, porque o negativo 1, tamén, que é un número enteiro.
E agora, o programa ou o monstro dentro do programa come un negativo
mazá, e agora eu teño 2 mazás negativos.
Hm, entón iso é unha lección -
aínda que a función GetInt e funcións relacionadas, como GetFlow ou
GetString obter o tipo de datos para a dereita, vostede ten que estar seguro de que a entrada fai
sentido para o seu programa.
>> En tostões, non fará máis que un poder a un enteiro, teñas que facer
seguro de que o usuario inserir un enteiro que ten sentido dado o contexto.
Mes pode ter só 28, 29, 30 ou 31 días.
Queremos esixir continuamente un número enteiro válido.
Se introducir un número enteiro fóra do noso límites aceptados, imos levalos
unha e outra vez, ata que ofrécenos un enteiro válido.
>> Teña en conta que do "repeat ata" bloquear en cero?
Podes facer unha construción semellante en C usando un loop "while"
ou "-mentres facer" loop.
A estrutura de loop while ten unha condición que deben ser cumpridos á
corpo do loop para realizar.
>> Isto debe parecer algo similar, porque a condición é igual a
Bloques cero cos ángulos e nos soportes
do loop "while".
Entón, esta condición pode comprobar se o número enteiro queda
os límites axeitados.
Pode pedir o número enteiro usando GetInt e, a continuación, realizar o seu "tempo"
loop, repetindo o poder e impresión instrucións, mentres que a entrada
non é válido.
>> Outra forma de garantir a entrada do usuario correcto está a usar un "do-while" loop,
o que é moi semellante a un loop.
O "faga mentres" lazo execútase o código dentro do corpo e, a continuación, os cheques
a condición de ser satisfeita ou non.
Isto é útil para a obtención de entrada do usuario, porque vostede sabe que precisa
para levalos polo menos unha vez.
Se a condición non se responde, o programa utilizará a liña tras
seu ", mentres fan" loop.
Se a condición se responde, porén, o ciclo se repetirá
>> A "faga mentres" volta para a validación de usuario entrada será algo parecido a isto.
Eu declaro unha variable n, GetInt e Repita ata que non é válido.
E este proceso, eu expliquei, estaba usando o tipo integer-data, que
vai empregar para os días do mes.
Pero sabemos que o número de moedas de un centavo se acumulan rapidamente, polo que, a fin de
almacenar números grandes, usa o tipo de datos LongLong, pero lembre se a mesma
principio de validación se aplica.
>> Impresionante, entón cando temos dous válido entradas do usuario -
días do mes e as moedas de un centavo o primeiro día -
podemos pasar á seguinte parte do programa.
O primeiro día, o usuario comeza con porén moitos tostões eles especificados
e a cantidade de moedas que recibir, o día seguinte é dobrada.
Polo tanto, ten sentido manter o control destes dous valores -
canto diñeiro o usuario ten e como moitos tostões que será dado.
>> Agora facer algo por 28 a 31 días é repetitivo, por iso imos usar un "for"
loop para iterado sobre os días no mes, actualizar o total e peso
cantidade de cada vez.
"Para" sintaxe de loop contén o seguinte -
unha inicialización, unha condición, e unha actualización.
O seu bucle "for" pode arrincar unha variable, cando
entra por primeira vez o loop.
Se a condición se responde, o corpo do loop será executado.
Despois diso, a actualización será executada.
Se a condición é aínda cumprida, o loop executarase e actualizar e
repetir, sempre que a súa condición valorada como certa.
>> Velaquí un loop "é" que divide unha número enteiro de 2 p por un total de 10 veces.
Observe como eu declarei o enteiro p fóra do meu loop "a", de xeito que o
enteiro pode ser accesible fóra do loop "a".
Despois de que o mes pasou, é hora para informar ao usuario canto diñeiro
eles quedaron.
Pola especificación, ten que informar ao usuario cantos dólares, e non como moitos
tostões, que eles teñen.
Pero ata agora, mantivo o control do total e os tostões que utilizan LongLongs,
que son números enteiros.
>> Hai 100 centavos a US $ 1, salvo que o número de moedas é unha
múltiplo de 100, vai ter representar cifras decimais.
O autotype dobrou permite que faga iso.
Entón, como imos converter de representar tostões para dólares?
>> Imos dar un ollo pi.c.
Este programa ten un big_pi LongLong e divídese por 100 mil, e imprime
o resultado de cinco cifras decimais.
Se quixésemos ver catro decimal lugares, entón podemos simplemente substituír este
número aquí.
Entón, imos gardar, compilar pi, e entón ver o resultado, que
esperar ser 3,1415 -
os cinco primeiros díxitos do pi.
>> Non é con todo.
E por que?
Ben, porque big_pi é un LongLong, que é un número enteiro, o que non
manter o control de cifras decimais.
A modificación que eu teño facer é en división.
Eu teño converter a un double aquí antes división, porque dobres non pode manter
seguir de cifras decimais.
E eu estou indo a engadir unha nova liña aquí para unha mellor formato.
>> E aquí temos que -
3,1416.
Pode notar que imprime 3.1416 no canto de 3,1415 como se esperaba.
Isto porque roldas durante o proceso de división, en vez de só
truncando o valor.
Agora ten que ser capaz de imprimir a total final correctamente, que remata
o programa.
>> Parabéns.
O meu nome é Zamyla.
E iso foi tostões.
>> [Música tocando]