2014-02-14 4 views
-1

У меня есть проект, но мой учитель не научил нас массивам. Нам нужно вывести значки, соответствующие сопоставлению одного числа другому. IE основное число 1234, и я положил в 2315, выход будет < < <> где знаки не идут в порядке номеров, но этим порядком =, <,>.Итерация массива для программы

У меня есть идея, чтобы использовать массив, чтобы использовать некоторый код, который бы считывал весь массив и применял к нему правила, однако я не знаю, как это реализовать. Я уже давно нахожусь в Интернете, и ничего не нашел, что мне действительно помогает.

Просто, чтобы вы знали, что программа имеет больше шагов, чем только это, все из которых я уже завершил, я просто не могу понять эту часть. Я не хочу только ответа, я просто хочу, чтобы кто-то указал мне в правильном направлении.

Благодаря

EDIT :: Пример 1234 и 2315 являются плохими примерами. Чтобы дать более определенную идею, не отдавая слишком большую часть проблемы, поэтому мне нужно сделать это, указав num1 и num2 (соответствующие 1234 и 2315) от наименьшего до максимального или наименьшего и сравните этот путь. Таким образом, еще одним примером будет 4751 - это основной номер, и я поставил его в 1294. Результат будет == <>. Спасибо за помощь ребятам. Я многому учусь.

EDIT2 :: Спасибо, ребята, за помощь. Я многому научился. Мне больше не нужны представления, пока я не смогу загрузить свой код.

+0

Полностью смущенный. Можете ли вы дать несколько примеров ввода/вывода? Нам нужны более подробные сведения: длина массива фиксированная или динамическая и т. Д. –

+2

@FiddlingBits: 1 <2, 2 < 3, 3 > 1 и 4 <5, поэтому три < and one >, поэтому желаемый результат равен <<<>. –

+0

@PaulGriffiths Спасибо, что поняли это. –

ответ

1

Принимая ваше слово, что вы уже успешно выполнили большую часть своего задания, и предоставив вам код, который вам нужно будет проработать и понять, чтобы понять его и адаптировать к вашим потребностям, это будет делать то, что вы хотеть. Тот факт, что вам не нужно выводить знаки в том же порядке, что и сами цифры, делает это проще.

#include <stdio.h> 

int main(void) { 
    int num1 = 1234; 
    int num2 = 2315; 

    int lt = 0, gt = 0, eq = 0; 

    while (num1 > 0 && num2 > 0) { 
     int op1 = num1 % 10; 
     int op2 = num2 % 10; 

     if (op1 < op2) { 
      ++lt; 
     } else if (op1 > op2) { 
      ++gt; 
     } else { 
      ++eq; 
     } 
     num1 /= 10; 
     num2 /= 10; 
    } 

    for (int i = 0; i < eq; ++i) { 
     putchar('='); 
    } 

    for (int i = 0; i < lt; ++i) { 
     putchar('<'); 
    } 

    for (int i = 0; i < gt; ++i) { 
     putchar('>'); 
    } 

    putchar('\n'); 

    return 0; 
} 

и выходы:

[email protected]:~/Documents/src/scratch$ ./eq 
<<<> 
[email protected]:~/Documents/src/scratch$ 
+0

Большое вам спасибо. Это очень помогло мне. Пример с 1234 и 2315 не указывает на то, что ведет проект, поэтому этот код не работает полностью, но он дал мне представление о том, как заставить его работать. Я отправлю полный код в течение следующих нескольких дней. – Nick

0

Этот код позволяет получить степень п цифр, вы можете сравнить и сделать подсчет каждого символа вам нужно вернуть

char nthdigit(int x, int n) 
{ 
    while (n--) { 
     x /= 10; 
    } 
    return (x % 10) + '0'; 
} 

И это, как вы получите длину номера, проверить этот post

0

Как и было обещано здесь остальная часть моего кода. Он исправляет проблему, указанную в вопросе, но у меня есть другая проблема. Вероятно, это довольно заметно, но я хотел опубликовать свой код, поэтому я не забываю снова.

#include<stdio.h>//standard inputs and outputs 
#include<stdlib.h>//for compare, qsort, srand, and rand function 
#include<time.h>//for random numbers at different times 
#include<unistd.h>//for fun at the end 



int main(void){ 

int guess, gdig1, gdig2, gdig3, gdig4, random, rdig1, rdig2, rdig3, rdig4;//variables for main 
int lt, gt, eq, i, q, temp, holder;//this is for the hints 
int g[3],r[3]; 


printf("Give the computer a few seconds to come up with a super secret passcode.\n"); 


do{//figuring out a random code 
unsigned int iseed = (unsigned int)time(NULL); 
srand (iseed);//using an unassigned integer 
random = rand()%9000+1000;//generating a random number but limiting it 
rdig4 = random%10; 
rdig3 = (random/10)%10; 
rdig2 = (random/100)%10; 
rdig1 = (random/1000)%10;//figuring out the individual digits of the code 
} while ((rdig1 == rdig2)||(rdig1 == rdig3)||(rdig1 == rdig4)||(rdig2 == rdig3)||(rdig2 == rdig4)||(rdig3 == rdig4)||(rdig1 == 0)||(rdig2 == 0)||(rdig3 == 0)||(rdig4 == 0)); 
//^^ some crazy boolean expression making sure the random integer doesnt have any of the same digits. 




printf("\nThe actual passcode is:%d.\n",random);//testing in beginning comment out ******** 




do{ 
do{ 
    printf("\nEnter in your guess for the passcode: "); 
    scanf("%d",&guess);//inputting and reading the guessed code 

//  printf("You entered:%d\n",guess);//just to check comment out at end** 

    gdig4 = guess%10; 
    gdig3 = (guess/10)%10; 
    gdig2 = (guess/100)%10; 
    gdig1 = (guess/1000)%10;//figuring out the individual digits of the guess code using modulus operator 


    if (guess > 9999){//the starting loop statement to make sure number is valid. this one is if it is greater than 4 digits 
      printf("\nPlease use a four digit number for the passcode.\n"); 
    } 
    else if (guess < 1000){//this one is if it is less than 4 digits 
      printf("\nPlease use a four digit number for the passcode.\n"); 
     gdig1 = 1; 
     gdig2 = 1;//used so the computer still loops 
     gdig3 = 1; 
     gdig4 = 1; 
    } 
    if ((gdig1 == 0) || (gdig2 == 0) || (gdig3 == 0) || (gdig4 == 0)){ 
     break; 
    } 
    if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){//to skip this codeblock and move onto next 
     break; 
    } 
if (guess > 9999){ 
    break; 
} 
if (guess < 1000){ 
    break; 
} 
printf("\n%d %d %d %d\n",rdig1,rdig2,rdig3,rdig4); //used to testing comment out at end 
printf("\n%d %d %d %d\n",gdig1,gdig2,gdig3,gdig4); 


while (guess > 0){ 
g[i++] = guess % 10; 
guess /=10; 
} 

do{//took a long long LONG time to get 
    for(i = 0; i<3;i++){ 
     if(g[i] > g[i+1]){ 
      holder = g[i+1]; 
      g[i]=g[i+1]; 
      g[i+1] = holder; 
     } 
    } 
}while (i == 1); 
for(i = 0;i<4;i++){ 
printf("%d",g[i]); 
} 


while (random > 0){ 
r[i++] = random % 10; 
random /=10; 
} 

do{//took a long long LONG time to get 
    for(i = 0; i<3;i++){ 
     if(r[i] > r[i+1]){ 
      temp = r[i+1]; 
      r[i]=r[i+1]; 
      r[i+1] = temp; 
     } 
    } 
}while (i == 1); 
for(i = 0;i<4;i++){ 
printf("%d",r[i]); 
} 



/*  for(digit=0;digit<4;digit++){ 
     for(tmp=guess;tmp>0;tmp/=10){ 
      if(tmp%10==digit){ 
       printf("%d",digit); 
       g[i++]=digit; 
      } 
     } 
    } 
    printf("\n"); 
    for(i=0;i<4;i++){ 
     printf("%d",g[i]); 
     }//just to check 


    //this is for sorting the random 
    for(digit=0;digit<4;digit++){ 
     for(tmp=random;tmp>0;tmp/=10){ 
      if(tmp%10==digit){ 
       printf("%d",digit); 
       r[i++]=digit; 
      } 
     } 
    } 
    for(i=0;i<4;i++){ 
     printf("%d",r[i]); 
     }//just to check 
*/ 
//this is for hints 
rdig1=r[0];//redefining the random and guess digits so it is easier later 
rdig2=r[1]; 
rdig3=r[2]; 
rdig4=r[3]; 
gdig1=g[0]; 
gdig2=g[1]; 
gdig3=g[2]; 
gdig4=g[3]; 



q = 0; 
eq = 0; 
lt = 0; 
gt = 0; 
if (random > 0){//loop that always holds true 
    if (gdig1 == rdig1){ 
    eq++; 
    }else if (gdig1 < rdig1){ 
    lt++; 
    }else if (gdig1 > rdig1){ 
    gt++; 
    } 
    if (gdig2 == rdig2){ 
    eq++; 
    }else if (gdig2 < rdig2){ 
    lt++; 
    }else if (gdig2 > rdig2){ 
    gt++; 
    } 
    if (gdig3 == rdig3){ 
    eq++; 
    }else if (gdig3 < rdig3){ 
    lt++; 
    }else if (gdig3 > rdig3){ 
    gt++; 
    }  
    if (gdig4 == rdig4){ 
    eq++; 
    }else if (gdig4 < rdig4){ 
    lt++; 
    }else if (gdig4 > rdig4){ 
    gt++; 
    } 
} 
for (q = 0; q < eq; q++){//counting step for the = <> no problems here^^ 
    putchar('='); 
} 
for (q = 0; q < lt; q++){ 
    putchar('<'); 
} 
for (q = 0; q < gt; q++){ 
    putchar('>'); 
} 


//everything below is correct do not mess with ******************************************************************************************* 
} while (gdig1 > 0);//to loop inputs until they input correctly 

if ((gdig1 == 0) || (gdig2 == 0) || (gdig3 == 0) || (gdig4 == 0)){//a nested if statement to check each digit if it is a 0 
    printf("\nYou have entered the Super Secret Code!!!!!\nThe actual passcode is:%d.\n",random); 
    break; 
} 
if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){//to skip this codeblock and move onto next 
    break; 
} 

} while (((rdig1 != gdig1) && (rdig2 != gdig2) && (rdig3 != gdig3) && (rdig4 != gdig4)));//to loop inputs until they got it 




//everything below is correct do not mess with ******************************************************************************************* 
if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){ 
printf("\nCorrect Code inputted."); 
sleep(1); 
printf("\nImplementing unlocking procedures...\n"); 

for (i=0;i<=4;i++){//for fun cause why not. if you spend hours on code might as well have some fun :) 
    int p =25*i ; 
    printf("%d%% complete................\n",p); 
    sleep(1); 
} 
printf("Stand back!!! The vault is now opening.\n"); 
} 

return 0; 
} 
Смежные вопросы