Форум программистов, компьютерный форум CyberForum.ru

ANSI C - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
10.02.2010, 15:22     ANSI C #1
Приветики !
Срочно нужно закрыть сессию,но никак не могу сделать несколько прог...
помогите плиз, если не трудно =(

1.Написать программу, которая вчитывает дату (день, месяц, год) и подсчитывает, сколько дней есть к сегодняшний день от этой даты. Дата может быть в одинаковой степени в будущем, как и в прошлом. Помнить о високосныч годах.

2.Написать программу, которая вчитывает произвольно длинный текст из стандартного входа и выпишет его на стандартное в оборотной очередности. Используй динамическое назначение памяти. "Произвольно длинный" == лимитированный только емкостью памяти

3. Написать программу, которая вчитывает слово, а потом выпишет эти буквы, которые повторились в тем слове. Ни одна из букв не должна быть выписана больше чем один раз.
пример > правдоподобно п,д, о
> канделябр а
> енот -

4.Написать программу, которая проверяет,являютьсяя ли два слова анаграммами - то есть, когда переставляя буквы одного можно получить второе (вроде — тропа = апорт). Если не знаешь другой способ, то рассортируй буквы в обоих словах и проверь, есть ли по такой операции слова одинаковыми.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2010, 15:22     ANSI C
Посмотрите здесь:

Ansi C.функции C++
стандарт ANSI C++
C++ ANSI to UCS2 LE
C++ Обработка .txt кодировка ANSI и UTF-8 (буква "я" в ANSI воспринимается как EOF)
C++ ANSI и UNICODE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gemor
161 / 22 / 3
Регистрация: 05.02.2010
Сообщений: 207
10.02.2010, 16:45     ANSI C #2
сколько дней есть к сегодняшний день от этой даты
- что это???
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
10.02.2010, 17:24  [ТС]     ANSI C #3
Цитата Сообщение от Женя. Посмотреть сообщение
сколько дней есть к сегодняшний день от этой даты.
извините, вся на нервах,написала неверно =((

сколько дней прошло или осталось от заданой дати к той,которая есть сегодня (задана пользователем)

Добавлено через 2 минуты
Я первое начала делать, но не знаю как продолжить..

вот пример ...
не подскажете как дальше?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  
#include <stdio.h>
#include <stdlib.h>
 
 
static char daytab [2][13] = {
    { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
 
{
      int i, leap;
 
    leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
    for (i = 1; i < month; i ++ )
        day += daytab[leap][i];
    return day ;
}
 
{ int main ();
  int year, month , day;
 
 printf ( "poday rok, miesiac, dzien " );
 scanf  ( "%d", &year, &month, &day );
 printf (" poday dziesiejszy data ");
 scanf  ( "%d", &y , &m, &d );
 
 if ( year > y )
 { int temp;
   temp = year;
   year = y;
   y = temp;
 
   temp = month;
   month = m;
   m = temp;
 
   temp = day;
   day = d;
   d = day;
 }
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
11.02.2010, 23:27  [ТС]     ANSI C #4
Вот, это немного упрощеный вариант 1 задачи для человека,который еще не знаком со всеми функцыями =)может кому-то пригодиться

Код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
 
static char daytab [2][12] = {
    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
 
int is_leap(int year) {
    
    if((year%4 == 0 && year%100 != 0) || (year%400 == 0))
        return 1;
    return 0;
}
 
int is_later(int y1,int m1,int d1,  int y2,int m2,int d2) {
    if(y1 > y2) return 1;
    if(y1 < y2) return 0;
    if(m1 < m2) return 1;
    if(m1 > m2) return 0;
    if(d1 > d2) return 1;
    if(d1 < d2) return 0;
    return 0;
}
 
int main() {
    int diff = 0;
    int y1, m1, d1, y2, m2, d2;
 
    printf ("Input the first date (yyyy mm dd): ");
    scanf ("%d %d %d", &y1, &m1, &d1);
    printf ("Input the second date (yyyy mm dd): ");
    scanf ("%d %d %d", &y2, &m2, &d2);
 
    while(!is_later(y1,m1,d1, y2,m2,d2)) {
        d1++;
        if(d1 == daytab[is_leap(y1)][m1-1]) { 
            d1 = 1;
            m1++;
            if(m1 == 12) {
                m1 = 1;
                y1++;
            }
        }
        diff++;
    }
 
    printf("%d\n",diff);
    getchar();
    return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.02.2010, 03:23     ANSI C #5
C
1
2
3
4
5
6
7
8
9
int is_later(int y1,int m1,int d1,  int y2,int m2,int d2) {
    if(y1 > y2) return 1;
    if(y1 < y2) return 0;
    if(m1 < m2) return 1; /* не */
    if(m1 > m2) return 0;
    if(d1 > d2) return 1;
    if(d1 < d2) return 0;
    return 0;
}
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
12.02.2010, 03:36  [ТС]     ANSI C #6
хм...у меня компилировало...хотя все может быть..
возможно просто опечатка у меня получилась ...
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.02.2010, 03:46     ANSI C #7
функция определяет является ли date1 поздней по отношению к date2
годы и дни правильно, а месяцы неправильно
компиляция это не проверит, ошибка будет в результатах работы

Добавлено через 1 минуту
C
1
!is_later(y1,m1,d1, y2,m2,d2)
01.01.1970 будет позднее, чем 01.02.1990
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
12.02.2010, 03:48  [ТС]     ANSI C #8
Я уже поняла и заметила

прога работала правильно,возможно просто потом что-то автоматически изменила..извините
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 03:47     ANSI C #9
Цитата Сообщение от accept
01.01.1970 будет позднее, чем 01.02.1990
это я ошибся, тут будет правильно, так как годы идут первее
01.01.1970 будет позднее, чем 01.02.1970
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
13.02.2010, 04:12  [ТС]     ANSI C #10



Я вот со второй тоже немного разобраться не могу

например, вот что-то подобное

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main()
{
char *a, str, i;
int x, y, z;
 
char sometext[256];
printf ("Enter a sentence: ");
gets (sometext);
 
for (x=strlen(sometext); x>-1; x--){
printf(&sometext[x]);
printf("\n");
}
 
return 0;
}
но как сделать чтобы было динамическое распределение памяти и чтобы выводило слово в обратном порядке....???

может у кого-то есть какие-то идеи ? подскажите плиз
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 04:23     ANSI C #11
realloc не пойдёт
тут нужен список
Andrianka
 Аватар для Andrianka
3 / 3 / 0
Регистрация: 09.02.2010
Сообщений: 34
13.02.2010, 04:43     ANSI C #12
я думаю что может быть так...но одна проблема что оно не выводит первую букву,например
love--->evo

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main()
{
char BUF;
int x;
 
char *sometext;
printf("Podaj BUF:");
scanf("%c",&BUF);
sometext=(char *)malloc(BUF*sizeof(char*));
 
gets (sometext);
 
for (x=strlen(sometext); x>=0; x--){
printf("%1.1s", &sometext[x]);
 
}
free(sometext);
return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.02.2010, 05:55     ANSI C #13
По поводу строки произвольного размера: по-умному нужно заморачиваться с низкоуровневыми функциями чтения/записи, буфером для чтения символов и выделением памяти под строку кратно этому буферу. А по-дебильному как-то типа так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
char *str = NULL;
int c;
long len = 1;
str = (char*)malloc(len);
*str = '\0';
while ( ( c = getchar() ) != EOF ){
  if ( ( str = (char*)realloc(str, len + 1) ) == NULL ){
    fprintf(stderr, "Basta, karapuziki, konchilisya tancy!\n");
    exit(1);
  }
  str[len-1] = c;
  str[len++] = '\0';
}
...
Но настоятельно не советую так делать!
Лучше всё-таки читать строку в буфер определённого, но достаточно большого размера. А чтобы было "с динамическим выделением памяти" - полно вариантов! Например:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *reverse(char *s){
    char ch, *head, *tail;
    
    if ( !s || !*s )
        return NULL;
    for ( head = s, tail = s + strlen(s) - 1; head < tail; head++, tail-- ){
        ch = *head;
        *head = *tail;
        *tail = ch;
    }
    
    return s;
}
 
int main(void){
    char str[BUFSIZ], *r;
    
    printf("String: ");
    if ( !fgets(str, BUFSIZ, stdin) )
        exit(1);
    if ( r = strrchr(str, '\n') )
        *r = '\0';
    if ( !*str )
        exit(1);
    if ( ( r = strdup(str) ) == NULL )
        exit(1);
    printf("\nString: %s\nReverse: %s\n", str, reverse(r));
    
    free(r);
    exit(0);
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 12:53     ANSI C #14
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct node {
    char *p;
    struct node *next;
};
 
struct stack {
    struct node *head;
};
 
void CreateStack(struct stack *ps);
int PushStack(struct stack *ps, struct node *pn);
int PopStack(struct stack *ps, struct node *pn);
 
void ReverseLine(char *l);
char *DupLine(const char *l);
 
int main(void) /* C89 ANSI */
{
    char line[1000];
    int c, i;
    
    struct stack s;
    struct node n;
    
    CreateStack(&s);
    
    i = 0;
    while ((c = getchar()) != EOF) {
        line[i++] = c;
        if (i >= 1000-1) {
            line[i] = '\0';
            n.p = DupLine(line);
            ReverseLine(n.p);
            PushStack(&s, &n);
            i = 0;
        }
    }
    
    if (c == EOF && i != 0) {
        line[i] = '\0';
        n.p = DupLine(line);
        ReverseLine(n.p);
        PushStack(&s, &n);
    }
    
    while (PopStack(&s, &n) != 0) {
        printf("%s", n.p);
        free(n.p);
    }    
    
    exit(EXIT_SUCCESS);
}
 
void ReverseLine(char *l)
{
    int c;
    char *end;
    
    end = l+strlen(l)-1;
    for ( ; l < end; l++, end--) {
        c = *l;
        *l = *end;
        *end = c;
    }
}
 
char *DupLine(const char *l)
{
    char *p;
    
    p = (char *) malloc(strlen(l)+1);
    
    if (p != NULL);
        strcpy(p, l);
    
    return p;
}
 
/* CreateStack:  creates a clear stack ps */
void CreateStack(struct stack *ps)
{
    ps->head = NULL;
}
 
/* PushStack:  pushes to a stack ps a node pn;
               returns 1 or 0 */
int PushStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    tmp = (struct node *) malloc(sizeof(struct node));
    
    if (tmp == NULL)
        return 0;
    
    *tmp = *pn;
    tmp->next = ps->head;
    ps->head = tmp;
    
    return 1;
}
 
/* PopStack:  pops from a stack ps a node pn;
              returns 1 or 0 */
int PopStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    if (ps->head == NULL)
        return 0;
    
    tmp = ps->head;
    *pn = *tmp;
    ps->head = tmp->next;    
    free(tmp);
    
    return 1;
}
Добавлено через 46 секунд
это для произвольной длины
Andrianka
 Аватар для Andrianka
3 / 3 / 0
Регистрация: 09.02.2010
Сообщений: 34
13.02.2010, 23:32     ANSI C #15
мне мой упрощенный вариант нравится больше))))он не такой нагруженый)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    int n;
    int x;
    char *sometext;
 
    printf("Podaj liczbe znakow:");
    scanf("%d",&n);
 
    sometext = malloc((n+1)*sizeof(char));
 
    printf("Podaj tekst:");
    scanf("%s", sometext);
    for (x=strlen(sometext); x>=0; x--){
        printf("%c", sometext[x]);
    }
    free(sometext);
    return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.02.2010, 05:16     ANSI C #16
обновил чуть-чуть

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct node {
    char *p;
    struct node *next;
};
 
struct stack {
    struct node *head;
};
 
void CreateStack(struct stack *ps);
int PushStack(struct stack *ps, struct node *pn);
int PopStack(struct stack *ps, struct node *pn);
 
void ReverseLine(char *l);
char *DupLine(const char *l);
 
enum {
    MAXLINE = 1000 /* == int */
};
 
int main(void) /* C89 ANSI */
{
    char line[MAXLINE];
    int c, i;
    
    struct stack s;
    struct node n;
    
    CreateStack(&s);
    
    i = 0;
    
    do {
    
        if ((c = getchar()) != EOF)
            line[i++] = c;
    
        if (i >= sizeof line - 1 || (c == EOF && i > 0)) {
            line[i] = '\0';
            n.p = DupLine(line);
            ReverseLine(n.p);
            if(PushStack(&s, &n) == 0) {
                fprintf(stderr, "error: not enough memory" "\n");
                exit(EXIT_FAILURE);
            }    
            i = 0;
        }
    
    } while (c != EOF);
        
    while (PopStack(&s, &n) != 0) {
        printf("%s", n.p);
        free(n.p);
    }    
    
    exit(EXIT_SUCCESS);
}
 
void ReverseLine(char *l)
{
    int c;
    char *end;
    
    end = l+strlen(l)-1;
    for ( ; l < end; l++, end--) {
        c = *l;
        *l = *end;
        *end = c;
    }
}
 
char *DupLine(const char *l)
{
    char *p;
    
    p = (char *) malloc(strlen(l)+1);
    
    if (p != NULL);
        strcpy(p, l);
    
    return p;
}
 
/* CreateStack:  creates a clear stack ps */
void CreateStack(struct stack *ps)
{
    ps->head = NULL;
}
 
/* PushStack:  pushes to a stack ps a node pn;
               returns 1 or 0 */
int PushStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    tmp = (struct node *) malloc(sizeof(struct node));
    
    if (tmp == NULL)
        return 0;
    
    *tmp = *pn;
    tmp->next = ps->head;
    ps->head = tmp;
    
    return 1;
}
 
/* PopStack:  pops from a stack ps a node pn;
              returns 1 or 0 */
int PopStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    if (ps->head == NULL)
        return 0;
    
    tmp = ps->head;
    *pn = *tmp;
    ps->head = tmp->next;    
    free(tmp);
    
    return 1;
}


Добавлено через 49 секунд
текстовые файлы нормально преобразует, а mp3, pdf обрывает

Добавлено через 4 минуты
Цитата Сообщение от Andrianka
C
1
scanf("%s", sometext);
прочитает до первого пробела

"Произвольно длинный" == лимитированный только емкостью памяти
в int'е помещается два гигабайта, в современном, в несовременном вообще 32 килобайта
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.02.2010, 03:50     ANSI C #17
Цитата Сообщение от accept
текстовые файлы нормально преобразует, а mp3, pdf обрывает
это, видимо, из-за cat f.mp3 | ./test
cat не показывает неотображаемые символы, поэтому они не передаются в программу

Добавлено через 18 минут
Код
[guest@station test]$ echo -ne "abcd\x00ef" >file.txt
[guest@station test]$ du -b file.txt
7       file.txt
[guest@station test]$ cat file.txt | ./test >file2.txt
[guest@station test]$ du -b file2.txt
4       file2.txt
[guest@station test]$ cat file.txt
abcdef[guest@station test]$
[guest@station test]$ cat file2.txt
dcba[guest@station test]$
Добавлено через 36 секунд
неотображаемые передаёт, а нулевой нет

Добавлено через 20 часов 27 минут
во, теперь и mp3

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct node {
    char *p;
    struct node *next;
};
 
struct stack {
    struct node *head;
};
 
void CreateStack(struct stack *ps);
int PushStack(struct stack *ps, struct node *pn);
int PopStack(struct stack *ps, struct node *pn);
 
char *MemDupLine(const char *l, size_t size);
void MemRevLine(char *l, size_t n);
 
enum {
    MAXLINE = 1000 /* maximal length of a line (equiv. to int) */
};
 
int main(void) /* C89 ANSI */
{
    char line[MAXLINE];
    int c, i;
    int maxlength, lastlength;
    
    struct stack s;
    struct node n;
    
    CreateStack(&s);
    
    maxlength = sizeof line;
    lastlength = 0;
    
    i = 0;
    
    do {
    
        if ((c = getchar()) != EOF)
            line[i++] = c;
    
        if (i >= maxlength || (c == EOF && i > 0)) {
        
            if (c == EOF && i > 0)
                lastlength = i;
        
            n.p = MemDupLine(line, i);
            
            MemRevLine(n.p, i);
            
            if(PushStack(&s, &n) == 0) {
                fprintf(stderr, "error: not enough memory" "\n");
                exit(EXIT_FAILURE);
            }    
            
            i = 0;
        
        }
    
    } while (c != EOF);
    
    while (PopStack(&s, &n) != 0) {
        
        if (lastlength == 0)
            fwrite(n.p, maxlength, 1, stdout);
        else {
            fwrite(n.p, lastlength, 1, stdout);
            lastlength = 0;
        }
        
        free(n.p);
    
    }    
    
    exit(EXIT_SUCCESS);
}
 
/* MemRevLine:  reverses n bytes in line l  */
void MemRevLine(char *l, size_t n)
{
    char *end;
    int c;
    
    end = l+n-1;
 
    for ( ; l < end; l++, end--)
        c = *l, *l = *end, *end = c;
}
 
/* MemDupLine:  duplicates size bytes of line l */
char *MemDupLine(const char *l, size_t size)
{
    char *p;
    
    p = (char *) malloc(size);
    
    if (p != NULL);
        memcpy(p, l, size);
    
    return p;
}
 
/* CreateStack:  creates a clear stack ps */
void CreateStack(struct stack *ps)
{
    ps->head = NULL;
}
 
/* PushStack:  pushes to a stack ps a node pn;
               returns 1 or 0 */
int PushStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    tmp = (struct node *) malloc(sizeof(struct node));
    
    if (tmp == NULL)
        return 0;
    
    *tmp = *pn;
    tmp->next = ps->head;
    ps->head = tmp;
    
    return 1;
}
 
/* PopStack:  pops from a stack ps a node pn;
              returns 1 or 0 */
int PopStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    if (ps->head == NULL)
        return 0;
    
    tmp = ps->head;
    *pn = *tmp;
    ps->head = tmp->next;    
    free(tmp);
    
    return 1;
}
Код
[guest@station test]$ du -b 1.mp3
5951552 1.mp3
[guest@station test]$ cat 1.mp3 | ./test >2.mp3;
[guest@station test]$ du -b 2.mp3
5951552 2.mp3
[guest@station test]$ head -c20 1.mp3 | hexdump -C;
00000000  ff fb 90 44 00 00 01 94  00 35 ed 00 00 08 2e 80  |...D.....5......|
00000010  06 bd a0 00                                       |....|
00000014
[guest@station test]$ tail -c20 2.mp3 | hexdump -C;
00000000  00 a0 bd 06 80 2e 08 00  00 ed 35 00 94 01 00 00  |..........5.....|
00000010  44 90 fb ff                                       |D...|
00000014
[guest@station test]$


оказалось не всё так просто
функция обращения строки стопорилась на нуль-символе
да и printf тоже

Добавлено через 22 часа 43 минуты
была ошибка, поправил
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
17.02.2010, 20:16  [ТС]     ANSI C #18
хм... я опять вернусь к первому заданию..
тот вариант что я предложила немного неправильный

вот здесь уже все хорошо
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
 
static char daytab [2][12] = {
    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
 
int is_leap(int year) {
 
    if((year%4 == 0 && year%100 != 0) || (year%400 == 0))
        return 1;
    return 0;
}
 
int is_later(int y1,int m1,int d1,  int y2,int m2,int d2) {
    if(y1 > y2) return 1;
    if(y1 < y2) return 0;
    if(m1 > m2) return 1;
    if(m1 < m2) return 0;
    if(d1 > d2) return 1;
    if(d1 < d2) return 0;
    return 0;
}
 
int main() {
    int diff = 0;
    int y1, m1, d1, y2, m2, d2;
 
    printf ("Input the first date (yyyy mm dd): ");
    scanf ("%d %d %d", &y1, &m1, &d1);
    printf ("Input the second date (yyyy mm dd): ");
    scanf ("%d %d %d", &y2, &m2, &d2);
 
    while(!is_later(y1,m1,d1, y2,m2,d2)) {
        d1++;
        if(d1 == (daytab[is_leap(y1)][m1-1]) + 1) { 
            d1 = 1;
            m1++;
            if(m1 == 13) {
                m1 = 1;
                y1++;
            }
        }
        printf("%d %d %d\n", y1, m1, d1);
        diff++;
    }
 
    printf("%d\n",diff);
    getchar();
    return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.02.2010, 03:25     ANSI C #19
тебе надо ввести сегодняшнюю дату (потом уже можно автоматически узнавать)
а потом ввести дату до неё или после неё
а потом уже применить вычисление

то есть между scanf и while не хватает расстановки дат на первую и вторую
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2010, 03:31     ANSI C
Еще ссылки по теме:

ANSI to Unicode C++
ANSI to Unicode C++
C++ Wide <--> ansi

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
18.02.2010, 03:31  [ТС]     ANSI C #20
ну да ... я тоже думала что еще чего-то не хватает... а еще там может быть ошибка в один день кажись....но не уверенна...

но препод у меня это прогу принял...
я этот исправленный вариант закинула чтобы "поделиться" - а вдруг еще кому-то нужен будет ...
Yandex
Объявления
18.02.2010, 03:31     ANSI C
Ответ Создать тему
Опции темы

Текущее время: 14:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru