Jump to content

Домашно на C


Препоръчан пост

За домашно ми дадоха да направя програма която да чете цели числа от стандартния вход, докато стигне до EOF или възникне грешка при четене.

След това да отпечетва най-голямото и най-малкото прочетено число. Нещо не мога да я измисля. Моля, който знае да помогне.

Link to comment
Сподели другаде

Ето програмката :)

#include <stdio.h>

int main()
{
int Stoinost;//Promenliwata za stoinost
int Minimum,Maximum;//promenlivite za max i min stoinost

scanf("%d", &Minimum);//wuwejda se 4islo za da moje max i min da go priemat ina4e programata gurmi
Maximum = Minimum;//priemane na stojnostta

while(scanf("%d",&Stoinost)==1)//wuwejdame 4isla dokato ne stigne do EOF ili gre6ka;Pi6eme ==1 za6toto scanf pri gre6ka wru6ta 1-ca
                   
{
if(Minimum > Stoinost)//uslowite za prowerka na minimalnata stoinost
{
Minimum=Stoinost;
}
                                           
if(Maximum < Stoinost)//uslowite za prowerka na maximalnata stoinost
{
Maximum=Stoinost;
}

}
printf("Minimalna=%d\n",Minimum);//izwejdane na minimalnata

printf("Maximalna=%d\n",Maximum);//izwejdane na maximalnata

return 0;
}

Link to comment
Сподели другаде

Само не разбирам защо използваш 1 вместо "true" в ред:

while(scanf("%d",&Stoinost)==true)

Виж че true изглежда доста по добре :) И освен това програмата никога няма да ти изведе грешка нито пък EOF. Особено забавно става като ваведеш от първия пън нещо от рода на "fsdljkh" примерно. Давам ти домашно да си намериш грешката.

Link to comment
Сподели другаде

Колега така по-добре ли е?

 

#include <stdio.h>

int main()
{
int Stoinost,q=1;
int Minimum,Maximum;
while(scanf("%d", &Minimum)!=true)
{
printf("ERROR\n");
q=0;
break;
}
Maximum = Minimum;

while(scanf("%d",&Stoinost)==true)
                   
{
if(Minimum > Stoinost)
{
Minimum=Stoinost;
}
                                           
if(Maximum < Stoinost)
{
Maximum=Stoinost;
}

}
if(q)
{
printf("Minimalna=%d\n",Minimum);

printf("Maximalna=%d\n",Maximum);
}

return 0;
}

 

Само не разбирам защо използваш 1 вместо "true" в ред:

while(scanf("%d",&Stoinost)==true)

И освен това програмата никога няма да ти изведе грешка нито пък EOF.

Мисля че тук си сбъркал.

Link to comment
Сподели другаде

Значи ти започваш с проверка за грешка/проверка дали числото, което е въведено е интежер. Ако първото ти въвеждане е нещо различно от интежер програмата ти спира. До тук добре, ама ако първото ти число е интежер, а второто е буква програмата няма да изведе грешка, само ще излезе от цикла.

Не го приемай лично. И аз няма да кажа, че съм спец. И по скоро просто се забавлявам с тази програма и не искам да те ядосвам или нещо подобно. Така или иначе, човека вече си е предал домашното синорно :) Но е добре да се тества за проблем при всяко въвеждане, а не само при първото. За съжаление съм те объркал. Аз отдавна не съм се занимавал с С. Оказа се че в С няма дори boolean който има само две стойности true и false. така че си абсолютно прав, че не ги използваше преди. Забавното е че като ги използваш програмата пак върви, обаче защото компилаторите си мислят, че е програма на С++ а не на С. Като го настроиш да разпознава само С, "true/false" ти дават грешка. Така че се използва 0 и 1 като алтернативи явно ... забавно.

Ами ето и моите модификации>

#include <stdio.h>
#include <stdlib.h> // zaradi system("PAUSE");

int main(void)
{
int q=1, Stoinost, Minimum, Maximum;

while(scanf("%d",&Stoinost)==1){
   if (q == 1){                // pyrvo vyvejdane ako e pravilno
      Minimum = Stoinost;
      Maximum = Stoinost;
      q = 0;
   }
   if(Minimum > Stoinost)
   {
      Minimum=Stoinost;
   }
   if(Maximum < Stoinost)
   {
      Maximum=Stoinost;
   }   
}
/* Pri grehno vavejdane ot pyrviq pyt, Programata se prekratqva, za6toto nqma vyvedeni pravilno Integer 4isla.
  Ako prodylji 6te pokaje stoinostite na Minimum i Maximum kojto sa proizvolni predi pyrvoto im zadavane.
  */
if(q==1){
        fprintf(stderr, "Vyveli ste ne6to razli4no ot Integer\n");
        system("PAUSE"); //Pauza predi kraq na Programata, samo po jelanie
        return;
}

fprintf(stderr, "Vyveli ste ne6to razli4no ot Integer\n"); // priemame 4e vinagi e fakt na tova mqsto
printf("Minimalna=%d\n",Minimum);
printf("Maximalna=%d\n",Maximum);
system("PAUSE"); //Pauza predi kraq na Programata, samo po jelanie
return 0;
}

digit1.exe.txt

digit1.c.txt

Link to comment
Сподели другаде

Колега аз не се ядосвам спокойно,но целта на тази задача не е да изкарва грешка,а да ти изведе максимална и минимална стойност.От друга страна може и да се направи и с "true" и "false",само трябва да се дефинират макроси.А това в началото се прави и извежда "ERROR",защото просто не е въведено никакво число.От друга страна ако ще казваме за бъгове тя има още например като сме въвели число и буква трябва да го сметне цялото за грешно,а не само да извежда числото и да казва че има грешка,но това са вече подробности.От друга страна никъде в условието не пише да извежда грешки!Мисля да спрем вече да спорим за някъкви глупости.
Link to comment
Сподели другаде

Join the conversation

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

Гост
Отговори на тази тема

×   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

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...