Так что я получил эту работу, которую я должен дать о создании цифровых часов. Пользователь устанавливает количество узлов, и каждый узел равен 1/n секунды, где N — это количество узлов, которые помещает пользователь. После этого меня вызывают, чтобы сделать 3 указателя:
- один на секунды
- один на минуты
- один на несколько часов
Указатель Seconds должен запускать все узлы в кольцевой ссылке. Для полного оборота указатель минут должен начать двигаться к следующему узлу, и после общего числа 60 перемещений указателя минут сразу после этого должен следовать указатель часов. Часы должны делать следующие вещи:
Пользователь может установить часы на ноль: 00:00:00;
Пользователь может установить часы с точностью до секунд.
Программа должна показывать часы после каждого действия.
Пользователь может запрограммировать часы на будильник, при котором часы показывают сообщение пользователю.
Ему нужно найти следующий час, когда его указатели (на часах, а не в программе) выровняются (например: 12:00,01:05,02:10,03:15 и т. д.)
- он завершает программу после освобождения всей оставшейся памяти, которую использовал наш список.
вот мой код, но у меня возникли некоторые трудности с ним.
#include<stdio.h>
#include<stdlib.h>
int counter=0;
typedef struct Node
{
int data;
struct Node *next;
}node;
void insert(node *pointer, int data)
{
node *start = pointer;
/* Iterate through the list till we encounter the last node.*/
while(pointer->next!=start)
{
pointer = pointer -> next;
}
/* Allocate memory for the new node and put data in it.*/
pointer->next = (node *)malloc(sizeof(node));
pointer = pointer->next;
pointer->data = data;
pointer->next = start;
}
void print(node *start,node *pointer)
{
if(pointer==start)
{
return;
}
printf("%d ",pointer->data);
print(start,pointer->next);
}
int main()
{
/* start always points to the first node of the linked list.
temp is used to point to the last node of the linked list.*/
node *start,*temp;
start = (node *)malloc(sizeof(node));
temp = start;
temp -> next = start;
/* Here in this code, we take the first node as a dummy node.
The first node does not contain data, but it used because to avoid handling special cases
in insert and delete functions.
*/
node *sec,*min,*hour;
int v,c,n;
printf("1. Insert N\n");
printf("2. Make Time Zero\n");
printf("3. Set Clock\n");
int query;
scanf("%d",&query);
if(query==1)
{
int data,i,n;
printf("Posa n thes\n");
scanf("%d",&n);
for (i = 0; i < 60*n; i++)
{
data = i;
insert(start,data);
printf("%d\n",i);
}
node *sec_copy;
sec_copy=start;
min=start;
hour=start;
while(n>0)
{
sec_copy=sec_copy->next;
n--;
c++;
if(c == 59*n)
{
min=min->next;
c=0;
v++;
}
if(v == 60)
{
hour=hour->next;
v=0;
}
}
}
printf("%d",sec->data);
if(query==2)
{
int timer;
timer=0;
printf("%.2d:%.2d:%.2d",timer,timer,timer);
}
if(query==3)
{
int h,m,s;
printf("Set me hours");
scanf("%d",&h);
h = h%24;
printf("Set me min");
scanf("%d",&m);
h = h+m/60;
m = m%60;
printf("Set me secs");
scanf("%d",&s);
h = h + s/3600;
m = m + s%3600;
s = s%60;
}
}
;
после ваших условных тестов делает их неэффективными. Вif(query==2); { ...code... }
всегда выполняется код в фигурных скобках. - person Weather Vane   schedule 05.11.2014