[C] - porovnání čísel

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Tapsik 4. 5. 2012 22:22

Zdravím, mám za ukol vytvořit program, ve kterém uživatel zadá 10 čísel a tato čísla se porovnají s 20 náhodně vygenerovanými čísly. Čísla, která se shodují se vypíší (pokud možno nějak zvýrazněné) Mohl by mi někdo poradit s tím jak mám porovnat zadaná čísla s náhodně vygenerovanými..níže uvádím kod
Kód: Vybrat vše
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>


int main(int argc, char* argv[])
{

   int hadane=0,dolni=1;
   int i=0,horni=81,n=0,pokus=0;
   int pole[20];
   int pocet=1,pom;
   char volba,odpoved;
   int cislo;
   
   FILE *soubor;
   
   
   
   printf("*********************\n");
   printf("* HADANI CISEL *\n");
   printf("*********************\n\n");

   //info
   printf("Zahrajeme si hru...\n");

   
   printf("1 - Start\n");
   printf("X - nechci si hrat, mam praci!\n");
   printf("------------------------------\n\n");


   printf("Vase volba: ");
   volba=toupper(getchar());
   switch(volba) {
   
   case '1':
            
         printf("\nZadejte 10 cisel\n\n");
      
         if((soubor=fopen("cisla.dat","wt"))==NULL) {
            exit(1);
         }
         
      else {
         fseek(soubor,0,SEEK_SET);
      
         }
         
          for (i=1; i<=10; i++) {          /* Deset průběhů */
       
            scanf("%d",&cislo);
            
               if (cislo>81){
            printf("\nZadane cislo musi byt v rozsahu 1 - 81\n");
            }
           
           
            else{
         fprintf(soubor,"%d\n",cislo);
        }
    }   

       getchar();
      printf("\n\nBylo vylosovano:\n");
      
             for (i=1; i<=20; i++) {          /* Deset průběhů */
       
       pole[i] = rand() % horni;    /* Přířazení náhodného čísla do pozice v poli */
         printf("%d\n", pole[i]);   /* Tisk pozice s číslem */
    }
fclose(soubor);   
getchar();
      
            
          break;
               
      
   

   //konec
   case 'X':
      
   exit(1);
      break;
               
   default:
      
      printf("\nNeplatny vstup!");
      getchar();
      exit(1);
   }
   
   

   getchar();
   return 0;
};
Tapsik
Junior

Odeslat příspěvekod vrsek 5. 5. 2012 12:43

V cyklu for, kde generujes nahodna cisla se dostavas mimo index pole! Pozor, pole se indexuji od nuly, takze spravne je

for(int i = 0; i < 20; i++)

Zkusil bych si udelat dve pole, napr tipy[10] a vylosovane[20] (tvoje puvodni pole[20]). Do pole tipy[10] si ukladej tipovana cisla (ktere nacitas v case '1').

Nasledne nakonci, az budes vylosovane cisla vypisovat, tak pridej dalsi cyklus for, kde proveris prave vypisovane cislo se vsemi tipy. Pokud zjistis, ze se nejake rovna, indikujes si to nejakou promennou (napr. bool spravne = true). Kdyz takto zjistis, ze jsi cislo nalezl, vypises ho zvyraznene (treba mezi hvezdickama) a tak dal dokud nevypises vsechny...
vrsek
Kolemjdoucí

Odeslat příspěvekod Tapsik 5. 5. 2012 21:33

Díky, bylo by možné aby jsi mi ten kod upravil ?
Tapsik
Junior

Odeslat příspěvekod vrsek 6. 5. 2012 09:57

Promin, ale nespadas sem? viewtopic.php?f=922&t=929499

Jestli to je ukol, je to ukol proto, aby ses nad tim zamyslel a nadrel - protoze jedine to te opravdu nauci programovat... A ukol je to od toho, aby te naucil.

A pokud programujes, protoze se to sam chces naucit, tak se nad tim musis zamyslet a nadrit - protoze jedine to te opravdu nauci programovat... :)

Zkratka a dobre opisovanim zdrojoveho kodu se jeste nikdo nikdy nic nenaucil...

Pokud jsi napsal vyse uvedeny zdrojovy kod ty, nechapu potom, kde je problem, podle moji rady napsat upravu (zadne jine prvky jazyka C nejsou potreba, nez ty ktere jsi sam pouzil, teda az na bool, ale to je prace jako s kazdou jinou promennou). Pokud moji radu nechapes - klidne se ptej a ja ti ji rad dovysvetlim.

Nebo jinak - zkousej. Pokud se chces drzet moji rady (nemusis), nejak to naprogramuj, jak te napadne. Treba ti to nepujde zkompilovat... Nejake chyby treba opravis sam. Pokud to nakonec zkompilujes a nebude delat to co ma a nebudes vedet proc, tak sem opet hod zdrojak (at uz to zkompilujes nebo ne) a ja ti zkusim rict kde mas chybu.

Rad ti pomuzu. Ale pamatuj, pomoc neznamena, ze udelam praci za tebe.
vrsek
Kolemjdoucí

Odeslat příspěvekod Tapsik 6. 5. 2012 13:18

a není možné hodnoty porovnat přímo v průchodu pole ?
Kód: Vybrat vše
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>


int main(int argc, char* argv[])
{

   int hadane=0,dolni=1;
   int i=0,horni=81,n=0,pokus=0;
   int k;
   int shoda;
   int tipy[10];
   int vylosovane[20];
   int pocet=1,pom;
   char volba,odpoved;
   int cislo;
      FILE *soubor;
   
   
   
   printf("*********************\n");
   printf("* HADANI CISEL *\n");
   printf("*********************\n\n");

   //info
   printf("Zahrajeme si hru...\n");

   
   printf("1 - Start\n");
   printf("X - Konec aplikace!\n");
   printf("------------------------------\n\n");


   printf("Vase volba: ");
   volba=toupper(getchar());
   switch(volba) {
   
   case '1':
           
         printf("\nZadejte 10 cisel v rozsahu %d - %d\n\n",dolni,horni);
     
         if((soubor=fopen("cisla.dat","wt"))==NULL) {
            exit(1);
         }
         
      else {
         fseek(soubor,0,SEEK_SET);
     
         }
         
          for (i=0; i<10; i++) {          /* Deset průběhů */
       
            scanf("%d",&tipy[i]);
           
               if (tipy[i]>81){
            printf("\nZadane cislo musi byt v rozsahu %d - %d\n",dolni,horni);
            }
           
           
            else{
         fprintf(soubor,"%d\n",tipy[i]);
        }
    }   

       getchar();
      printf("\n\nBylo vylosovano:\n");
     
             for (i=0; i<20; i++) {          /* Deset průběhů */
       
       vylosovane[i] = rand() % horni;    /* Přířazení náhodného čísla do pozice v poli */
       if ( strstr(tipy,vylosovane[i]) != NULL ){
            printf("***shoda císel %d ***", vylosovane[i]);
            }
       else{
         printf("%d\n", vylosovane[i]);   /* Tisk pozice s číslem */
         }
}
fclose(soubor);   
getchar();

          break;

   //konec
   case 'X':
     
   exit(1);
      break;
               
   default:
     
      printf("\nNeplatny vstup!");
      getchar();
      exit(1);
   }
   
   

   getchar();
   return 0;
};
Tapsik
Junior


  • Podobná témata
    Odpovědi
    Zobrazení
    Autor

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků