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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
#1

ANSI C - C++

10.02.2010, 15:22. Просмотров 2342. Ответов 20
Метки нет (Все метки)

Приветики !
Срочно нужно закрыть сессию,но никак не могу сделать несколько прог...
помогите плиз, если не трудно =(

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

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

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

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

Обработка .txt кодировка ANSI и UTF-8 (буква "я" в ANSI воспринимается как EOF) - C++
Есть следующий кусок кода: FILE* fp = fopen("G:\OPND1.txt", "r"); if (fp!=NULL) // если файл удалось открыть { while((ch =...

ANSI to UCS2 LE - C++
Здравствуйте! Столкнулся с такой проблемой: Проект на C++ генерит файлик (через ofstream). Он получается в кодировке ANSI. Чтобы...

ANSI to Unicode - C++
Всем доброго времени суток! Есть задачка преобразовать строку в cp1251 в строку в unicode и сохранить ее в файл в кодировке unicode...

ANSI и UNICODE - C++
#include <iostream> #include <windows.h> using namespace std; int main(){ TCHAR j; return 0;

Раскодировка ANSI - C++
Подскажите как раскодировать ANSI. Может быть есть онлайн декодеры или что то в этом роде?

Стандарт ANSI - C++
если использовать #include <queue> #include <vector> это уже не стандарт ANSI??

Ansi C.функции - C++
Очень прошу,помогите плиииз....я не могу никак закрыть сессию...=( 1.Написать фунцкию char *dodaj(const char *n1,const char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 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
4821 / 3241 / 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
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.02.2010, 03:25     ANSI C #19
тебе надо ввести сегодняшнюю дату (потом уже можно автоматически узнавать)
а потом ввести дату до неё или после неё
а потом уже применить вычисление

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

но препод у меня это прогу принял...
я этот исправленный вариант закинула чтобы "поделиться" - а вдруг еще кому-то нужен будет ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2010, 05:06     ANSI C
Еще ссылки по теме:

Wide <--> ansi - C++
а можно как то сконвертить один символ wide в ansi и обратно? кроме как через функции типа MultiByteToWideChar? wchar_t - 2х байтный тип,...

ANSI to Unicode - C++
Hi all. Вопрос к экспертам :) Хочу сохранить строку текста (кириллица) в текстовый файл. Строка в ANSI, а нужно сконвертировать в...

ansi c. Методы борьбы. - C++
Есть сканер(термнал сбора данных). Прошива на ANSI. Прошиву писали сами. Все нормально, но при обращении к БД аппарат виснет.Ошибку ...

Перевод из Unicode в ANSI - C++
Привет! При переводе из Unicode в ANSI юзаю вот эти две функции: CharToOemW и OemToCharA. Первая переводит из Unicide в Oem, а вторая - из...

Как конвертировать Unicode в Ansi? - C++
Я написал свою функцию конвертирования из Unicode в Ansi, но она не правильно кодирует символы русского языка. Как такое исправить? ...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.02.2010, 05:06     ANSI C #21
Цитата Сообщение от Женя.
а еще там может быть ошибка в один день кажись
не, для двух соседних дат можно проверить, если всё правильно, то для всех правильно
Yandex
Объявления
18.02.2010, 05:06     ANSI C
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru