Fòrums

Mac c++ doble més gran (doble x, doble y)

R

escalador9up

Cartell original
28 d'agost de 2012
  • 28 d'agost de 2012
Hola, tinc un problema de C++ (acabo de començar a aprendre l'idioma) que requereix que escolliu el més gran dels 15 nombres. Ja he escrit el codi, però el problema també indica que 'Això s'ha de fer amb el prototip:
doble més gran (doble x, doble y).

El problema continua dient que utilitzeu un bucle for (cosa que he fet). No tinc ni idea del que significa la declaració doble més gran (doble x, doble y) i, per tant, si he seguit els requisits. El meu codi per cert és:

*Codi suprimit per evitar el plagi

Qualsevol aportació seria molt apreciada! (I com més senzilla sigui l'explicació, millor, tot just començant a inclinar-se en C++ com he dit!) Gràcies Darrera edició: 4 de setembre de 2012

chown33

Moderador
Membre del personal
9 d'agost de 2009


el pla abismal
  • 28 d'agost de 2012
Permeteu-me afegir una paraula:
'Això s'ha de fer amb el funció prototip:
doble més gran (doble x, doble y).'​
Per tant, diu que hauríeu de definir una funció amb el prototip donat i que retorni el més gran dels dos nombres que s'han donat.

Si no sabeu què és una funció o el seu prototip, s'hauria d'haver tractat en tot el que esteu aprenent (llibre, tutorial en línia o classe). R

escalador9up

Cartell original
28 d'agost de 2012
  • 28 d'agost de 2012
Sí, només va ser una errada d'ortografia de paraula perduda. Realment no era la primera línia la que em va confondre (conec aquestes definicions), sinó la segona línia que em donava problemes. Però sembla com si hagués escrit el programa correctament, independentment. D

drsoong

Mar 24, 2008
Munic
  • 28 d'agost de 2012
correcte no significa necessàriament la manera com es demana

Tot i que el vostre programa pot funcionar correctament, el més probable és que no us obtingui el crèdit total de la tasca!

Chown ja va destacar la part important. Els problemes universitaris es plantegen per permetre't practicar aspectes concrets de la llengua que estàs aprenent, i això et demana que utilitzis un funció en la solució del problema, donant-vos fins i tot el prototip doble (doble x, doble) .

Hauríeu de tornar a les vostres notes, llegir-ne funcions en C++ i utilitzeu aquest concepte al vostre programa per oferir una solució a la tasca.

Tot i que en aquest petit exemple, la vostra i la solució demanada semblen equivalents, us ensenyarà un aspecte important sobre la programació modular.

-drsoong T

theoda3

set 27, 2006
  • 29 d'agost de 2012
A part que la implementació no és la que es va demanar, el vostre programa no proporciona la solució correcta. El problema us demana que utilitzeu double, però heu triat utilitzar int. Què creus que passarà quan algú introdueixi nombres decimals com a entrada? Què passa si tots els nombres donats són el mateix nombre enter però diferents valors en la posició decimal? Última edició: 30 d'agost de 2012 R

escalador9up

Cartell original
28 d'agost de 2012
  • 29 d'agost de 2012
Així que vaig reescriure el meu programa, una vegada més no estic segur de si això és correcte des que acabo de començar (dit això, gràcies per totes les respostes excepte per l'última que va ser grollera, he estat aprenent aquest idioma durant un total de tres dies, vaja. ).

De totes maneres, aquest és el meu nou programa:

*Codi suprimit per evitar el plagi



Una vegada més, qualsevol entrada seria apreciada, oh, i Xcode diu que un dels meus } que he pintat de blau té un problema semàntic (el control arriba al final de la funció no buida). Mentre el programa encara s'executa malgrat això, em preguntava com solucionar-ho (només traieu els claudàtors?)

Gràcies per aquestes respostes anteriors! Última edició: 4 de setembre de 2012 P

fantasma

Feb 2, 2009
  • 29 d'agost de 2012
Una vegada més, qualsevol entrada seria apreciada, oh, i Xcode diu que un dels meus } que he pintat de blau té un problema semàntic (el control arriba al final de la funció no buida). Mentre el programa encara s'executa malgrat això, em preguntava com solucionar-ho (només traieu els claudàtors?)

Esteu rebent aquest error perquè no torneu res a la vostra funció tot i que heu especificat que hauria de retornar un doble.

A més, no esteu utilitzant la funció correctament. Tot el que esteu fent és cridar-lo i després teniu una interfície d'usuari/entrada dins de la funció, no és una decisió de disseny molt bona.

Sense fer la vostra tasca per vosaltres, el que hauríeu de fer és provar de moure les vostres dades d'entrada a main i, a continuació, trucar a la vostra funció proporcionant els dos valors extrets de l'entrada de l'usuari. Aleshores, la vostra funció retornarà un doble i ho feu servir per a la vostra resposta.

Una altra nota: les vostres convencions de nomenclatura ja s'estan tornant confuses i el vostre codi només té unes poques línies, la llegibilitat fa molt. Última edició: 29 d'agost de 2012 T

theoda3

set 27, 2006
  • 29 d'agost de 2012
Em sap greu que hagis interpretat el meu missatge com a groller. No feia aquestes preguntes com a manera de criticar-te, sinó perquè poguessis pensar en els problemes que sorgirien tu mateix. Espero que reconegueu per què importa la diferència, a més del que es va demanar al problema. No és només una diferència de paraules entre double i int, el truncament es produirà si un nombre decimal s'emmagatzema com a int. T

theoda3

set 27, 2006
  • 29 d'agost de 2012
A partir de la teva última publicació, crec que està clar que no entens completament el prototip de funció i què es demana a la pregunta. Per tant, mirem el prototip de funció donat al problema i desglossem-lo.

doble més gran (doble x, doble y)
1) doble és un nombre de coma flotant de doble precisió amb signe. Pot tenir valors positius o negatius i poden ser decimals. Això és similar a un flotador, excepte que un flotador té menys precisió. Un flotant és de 32 bits i el doble és de 64 bits.
2) doble més gran: això indica que la funció s'anomena més gran i retorna un doble. Aquesta és la sortida de la funció.
3) doble x, doble y: aquestes són les variables que esteu passant a la funció més gran. x representa un dels nombres que voleu comparar i y representa l'altre nombre que voleu comparar. Tots dos nombres són dobles i són les entrades de la funció.

Mirant els dos fragments de codi que heu publicat, el primer és un millor punt de partida. Primer heu de substituir tots els enters per dobles perquè int no pot representar nombres decimals, només tallarà el decimal. A continuació, heu de mirar el vostre codi i preguntar-vos si hi ha una secció on compareu dos números i torneu el més gran dels dos. Si és així, substituïu aquesta secció per una trucada a més gran. Passeu els dos números que voleu comparar i emmagatzemeu el valor de retorn. Per exemple, si els vostres dos números són A i B i el resultat és el més gran dels dos números, la trucada podria semblar així, Resultat = més gran (A, B). Finalment, cal definir què fa la funció més gran. No necessiteu una classe per a això, només poseu la definició de la funció abans de main, similar al vostre segon fragment de codi, però sense la definició de classe.
(Bàsicament, això és el que va dir phantax) Última edició: 29 d'agost de 2012 R

escalador9up

Cartell original
28 d'agost de 2012
  • set 1, 2012
Crec que ho he entès

*Codi suprimit per evitar el plagi

Així que ho vaig reescriure basant-me en el que heu dit, això és el que he aconseguit. Crec que és correcte, tret que rebo un avís 'La variable 'num' no s'inicia quan s'utilitza aquí' basat en el 'num' i de color blau. Xcode intenta solucionar-ho canviant on defineixo num a una línia que diu doble num = 0.0. És correcte/alguna cosa que hauria de fer? O hauria d'ignorar això (i si se suposa que ho faig, per què és exactament necessari?) Tingueu en compte que el programa funciona correctament sense aquest canvi. Última edició: 4 de setembre de 2012 T

theoda3

set 27, 2006
  • set 1, 2012
rockclimber9up va dir: Així que ho vaig reescriure basant-me en el que heu dit, això és el que tinc. Crec que és correcte, tret que rebo un avís 'La variable 'num' no s'inicia quan s'utilitza aquí' basat en el 'num' i de color blau. Xcode intenta solucionar-ho canviant on defineixo num a una línia que diu doble num = 0.0. És correcte/alguna cosa que hauria de fer? O hauria d'ignorar això (i si se suposa que ho faig, per què és exactament necessari?) Tingueu en compte que el programa funciona correctament sense aquest canvi.

Encara no està del tot correcte, però estàs molt a prop.

1) El problema amb la vostra variable num és que no s'inicializa abans d'utilitzar-la quan la passeu a la funció més gran. En termes més senzills, no heu especificat explícitament el seu valor després de declarar la variable. De vegades, quan feu això, la variable rep un valor predeterminat, però de vegades pot ser un nombre aleatori, depèn de l'objecte que declareu. És una bona pràctica assignar sempre explícitament el valor de la variable en la declaració quan sigui possible. Quan no sigui possible, heu d'assegurar-vos de donar-li un valor explícitament abans d'utilitzar-lo. Això deixa clar quin és el valor inicial i pot evitar maldecaps de depuració si el vostre compilador no és tan indulgent com el que feu servir a Xcode. No heu vist aquest problema amb max perquè li heu assignat un valor llegint l'entrada utilitzant la línia cin >> max;

2) La vostra funció més gran no hauria de llegir des de l'entrada per assignar el valor de num, que anul·la el propòsit de passar el valor de num com un dels paràmetres de la funció. Traieu les línies cin i cout de la vostra funció més gran i moveu-les dins del vostre bucle for al principal, just abans de la vostra trucada a més gran. Això també ajuda a mantenir la vostra funció més gran, més general i modular.

3) No oblideu tornar 0 al final de main per indicar que el programa s'ha sortit correctament. També vaig mirar això fins a la publicació de Lloyddean. El seu mètode de retorn és agradable i és molt clar per al lector, però tots dos mètodes són comuns.

4) Hauríeu de considerar moure els vostres comentaris a la línia a sobre del codi que esteu comentant en lloc de la mateixa línia. Professionalment, encara és habitual que els equips de programari tinguin una política d'amplada de línia limitada i comentaris en línia com aquests només malgasten espai útil. Col·locar-lo a sobre manté l'amplada útil. A més, és una mica més fàcil llegir els comentaris a sobre del codi.

5) També hauríeu de considerar l'ús de claudàtors amb les vostres declaracions if encara que siguin una línia. Moltes vegades trobareu que quan escriviu una declaració if hi tornareu més tard i afegireu més codi. A més, és més fàcil llegir i reconèixer visualment quin codi s'inclou a la instrucció if quan feu servir claudàtors.

Si esteu interessats en bones directrius per a l'estil, podeu fer una ullada a la guia d'estil de Google C++, http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml . Aquesta no és l'última paraula sobre l'estil, però tenir algun mètode coherent que s'utilitza habitualment pot ser molt útil. Professionalment, trobareu persones i equips que utilitzen diferents mètodes d'estil. El més important és que sigueu coherents i intenteu que el vostre codi sigui el més llegible possible.

Gairebé ho teniu tot bé, així que aquí teniu el vostre codi amb els meus suggeriments:
Codi: |_+_| Tingueu en compte que no vaig inicialitzar max i num a la declaració, però tots dos s'inicialitzen utilitzant cin >> abans d'utilitzar-los. Última edició: 2 de setembre de 2012 R

escalador9up

Cartell original
28 d'agost de 2012
  • set 1, 2012
Moltes gràcies nois. Vas ser de gran ajuda! EL

la pau

10 de maig de 2009
Des Moines, WA
  • set 2, 2012
Codi: |_+_|