Dvoichno v desetichno chislo realizirano s opashka

15 views
Skip to first unread message

Martin Stoyanov

unread,
Jun 24, 2013, 6:04:16 AM6/24/13
to prog1...@googlegroups.com
Zadachata ot posledniq chas po programirane za 15 tochki:
#include <stdio.h>
#include <stdlib.h>

typedef struct Queue Queue;
typedef struct Item Item;

struct Queue
{
  Item *head;
  Item *tail;
  int count;
};

struct Item
{
  int value;
  Item *next;
};

Queue *queue_create();
void queue_enqueue(Queue *queue, int element);
int queue_dequeue(Queue *queue);

int main()

    Queue *queue = queue_create();
    int c, digit, count = 0;
    while ((c = getchar()) != EOF)
    {
        digit = c - 48;
        if (digit == 0 || digit == 1)
        {
            queue_enqueue(queue, c - 48);
            count++;
        }
    }
    int i,number = 0;
        for (i = count - 1; i >= 0; i--)
        {
            if (queue_dequeue(queue) == 1)
            {
                number = number + exponent(i);
            }
        }
        printf("%d", number);
  return 0;
}
Queue *queue_create()
{
  Queue *queue = (Queue *)malloc(sizeof(Queue));
  queue->head = NULL;
  queue->tail = NULL;

  return queue;
}

void queue_enqueue(Queue *queue, int element)
{
  Item *new_item = (Item *)malloc(sizeof(Item));
  new_item->value = element;
  new_item->next = NULL;
  if(queue->head == NULL)
  {
    queue->head = new_item;
    queue->head->next = queue->head;
    queue->tail = new_item;
  }
  else
  {
    queue->tail->next = new_item;
    queue->tail = queue->tail->next;
  }
}

int queue_dequeue(Queue *queue)
{
  if(queue->head != NULL && queue->tail != NULL)
  {
    Item *result_item = queue->head;
    int result = result_item->value;
    queue->head = queue->head->next;
    free(result_item);

    return result;
  }
  else
  {
     return -1;
  }
}
int exponent(int n)
{
    int number = 2, i;
    if (n == 0)
    {   
        number = 1;
        return number;
    }
    else
    {
        for (i = 1; i < n; i++)
        {
            number *= 2;
        }
       
    return number;
    }
   
}
Realizirana e s dinamichna opashka(dynamic queue).Purvo se suzdava funkciq za stepen na dvoikata(v sluchaq int exponent).Sled tova shte izvikame funkciqta vav main-a.Ako kompilirame samo int exponent, pri podadena stoinost na vhoda, programata shte povdiga number-a, koito e 2 na stoinostta, koqto sme podali.Ako podadem 4, otgovora shte e 16.Tolkova za Funkciqta sas stepenta.
V main-a suzdavame opashka i dokato vzimame vsqko simvolche, koeto podavame na vhoda i go enqueue-vame(slagame/pushvame) vav opashkata, kato priemame cifri, koito sa samo 0 i 1, digame count-a za vsqka vkarana cifrichka.V posledniq cikul  for, veche dequeuevame otgovora, poluchen ot funkciikata za stepen.

Reply all
Reply to author
Forward
0 new messages