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

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

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

ANSI C - C++

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

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

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

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

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

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

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

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

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

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

Перевод в ANSI - C++
Всем доброго времени суток! У меня следующая проблема: пишу парсер для языка html, на вход поступает файл с любым расширением (.html,...

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

20
Gemor
161 / 22 / 3
Регистрация: 05.02.2010
Сообщений: 207
10.02.2010, 16:45 #2
сколько дней есть к сегодняшний день от этой даты
- что это???
0
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
10.02.2010, 17:24  [ТС] #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;
 }
0
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
11.02.2010, 23:27  [ТС] #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;
}
1
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.02.2010, 03:23 #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;
}
1
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
12.02.2010, 03:36  [ТС] #6
хм...у меня компилировало...хотя все может быть..
возможно просто опечатка у меня получилась ...
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.02.2010, 03:46 #7
функция определяет является ли date1 поздней по отношению к date2
годы и дни правильно, а месяцы неправильно
компиляция это не проверит, ошибка будет в результатах работы

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

прога работала правильно,возможно просто потом что-то автоматически изменила..извините
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 03:47 #9
Цитата Сообщение от accept
01.01.1970 будет позднее, чем 01.02.1990
это я ошибся, тут будет правильно, так как годы идут первее
01.01.1970 будет позднее, чем 01.02.1970
0
Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
13.02.2010, 04:12  [ТС] #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;
}
но как сделать чтобы было динамическое распределение памяти и чтобы выводило слово в обратном порядке....???

может у кого-то есть какие-то идеи ? подскажите плиз
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 04:23 #11
realloc не пойдёт
тут нужен список
0
Andrianka
3 / 3 / 0
Регистрация: 09.02.2010
Сообщений: 34
13.02.2010, 04:43 #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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,819
13.02.2010, 05:55 #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);
}
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.02.2010, 12:53 #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 секунд
это для произвольной длины
0
Andrianka
3 / 3 / 0
Регистрация: 09.02.2010
Сообщений: 34
13.02.2010, 23:32 #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;
}
1
13.02.2010, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 23:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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