С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
1

Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’

30.12.2010, 21:45. Показов 4084. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет
народ помогите разобраться в чем ошибка, программа почему то печатает левое при наборе 3 и более строк
вот задание данное мне
Ввести массив строк символов (текст), которые могут содержать символы ‘*’. Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’.
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char *out;
char **vvod()
{
clrscr();
char **txt, size[128];
txt=NULL;
int len=-1;
   txt=(char**)malloc(sizeof(char*));
for (int i=0; len!=0; i++)
 {
   gets(size);
   len=strlen(size);
 
   txt[i]=(char*)malloc((len+1)*sizeof(char));
   strcpy(txt[i], size);
      txt=(char**)realloc(txt,(i+1)*sizeof(char*));
 }
return txt;
}
 
char *copysim(char *text)
{
char *out;
int n;
n=strlen(text);
out=(char*)malloc(((2*n)+1)*sizeof(char));
for(int i=0, j=0;  i<n&&j<(2*n); i++)
 {
   if (text[i]!='*')
   {
     out[j]=text[i];
     j++;
     out[j]=text[i];
     j++;
   }
 }
 out[j]=0;
return out;
}
 
void main()
{
char **text;
text=vvod();
for (int i=0; strlen(text[i])!=0; i++)
{
out=copysim(text[i]);
printf("%s", out);
}
getch();
 
}
в чем ошибка то? ничего не пойму, и вролде работает все норм но неправильно почему то, подскажите плиз оч надо

Добавлено через 3 часа 24 минуты
разве никто не знает в чем причина? что не так в моем коде то??
0
Programming
Эксперт
9485 / 562 / 19
Регистрация: 12.04.2006
Сообщений: 11,671
Блог
30.12.2010, 21:45
Ответы с готовыми решениями:

Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’
всем привет. Дано такое задание.. Ввести массив строк символов (текст), которые могут содержать...

Дана строка. Преобразовать ее, удалив каждый символ (*) и повторив каждый символ, отличный от (*)
напишите пожалуйста решение задачи и к нему СКРИН ну или хотя бы вот эту задачу напишите В...

Преобразовать строку, удалив каждый символ * и повторив каждый символ, отличный от *
Собственно задание Дана строка. Преобразовать ее, удалив каждый символ * и повторив каждый...

Преобразовать файл, удалив каждый символ ‘*’ и повторив каждый символ, отличный от ‘*’
Дан текстовый файл. Преобразовать его, удалив каждый символ ‘*’ и повторив каждый символ, отличный...

29
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
30.12.2010, 21:54 2
Напиши данные, на которых эта прога спотыкается. Например:
C++
1
2
3
stroka_1
stroka_2
stroka_3
...Так, нечто подобное пишешь и пишешь: вот при вводе таких строк прога пишет херь вместо того, чтобы писать то-то и то-то

Эти строки нужны мне чтобы я время не тратил на их поиск тем более, что ты их уже нашёл, просто выложи сюда и всё.
Чем меньше по объёму будут даные тем легче будет работать мне.
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
30.12.2010, 22:35  [ТС] 3
Цитата Сообщение от kravam Посмотреть сообщение
Напиши данные, на которых эта прога спотыкается. Например:
C++
1
2
3
stroka_1
stroka_2
stroka_3
...Так, нечто подобное пишешь и пишешь: вот при вводе таких строк прога пишет херь вместо того, чтобы писать то-то и то-то

Эти строки нужны мне чтобы я время не тратил на их поиск тем более, что ты их уже нашёл, просто выложи сюда и всё.
Чем меньше по объёму будут даные тем легче будет работать мне.
как понять какие данные?? она иногда норм работает есл иввожу две строки а если ввжу три строки то туипить и пишит какие то кааркули проблема как я понимаю возникает в функции ввода т.е. char **vvod и скорее вс его либо при вывводе коечного резултата т.е. там где цикл либо при функции кописим
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
30.12.2010, 22:56 4
Мне всё равно где там какая у тебя проблема. Ты сам не смог разобраться, теперь позволь уж мне.
если ввжу три строки то туипить и пишит какие то кааркули проблема
Какие три строки?
Ты буквы можешь написать из которых состоят эти строки, ё?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.12.2010, 22:59 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

eddilou, держи, вроде все работает:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char** input(size_t* nrows)
{
    if(nrows == NULL)
    {
        fprintf(stderr, "You must specify the pointer to store the number of rows\n");
        exit(1);
    }
    char**  text = NULL;
    char*   buf;
    ssize_t len, n;
    size_t  rows = 0;
    puts("Input text (Ctrl+Z or Ctrl+D to stop):");
    while(1)
    {
        buf = NULL;
        len = getline(&buf, &n, stdin);
        if(len == -1)
        {
            if(feof(stdin))
                break;
            perror("getline");
            exit(2);
        }
        ++rows;
        if((text = realloc(text, rows * sizeof(char*))) == NULL)
        {
            perror("realloc");
            exit(3);
        }
        text[rows - 1] = buf;
    };
    *nrows = rows;
    return text;
}
 
char* processrow(const char* row)
{
    char* buf;
    char* p;
    // Символ '\n' дублировать не будем
    if((buf = calloc(strlen(row) * 2, sizeof(char))) == NULL)
    {
        perror("calloc");
        exit(4);
    }
    p = buf;
    while(*row)
    {
        switch(*row)
        {
        case '*':
            ++row;
            break;
            
        case '\n':
            *p++ = *row++;
            break;
            
        default:
            *p++ = *row;
            *p++ = *row++;
        }
    }
    return buf;
}
 
int main()
{
    size_t nrows, i;
    char** text = input(&nrows);
    printf("After processing:...\n");
    for(i = 0; i < nrows; ++i)
    {
        char* buf = processrow(text[i]);
        fputs(buf, stdout);
        free(buf);
        free(text[i]);
    }
    free(text);
    exit(0);
}
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 07:25  [ТС] 6
Цитата Сообщение от kravam Посмотреть сообщение
Мне всё равно где там какая у тебя проблема. Ты сам не смог разобраться, теперь позволь уж мне.

Какие три строки?
Ты буквы можешь написать из которых состоят эти строки, ё?
я же говворю любые символы введите допустим
adssad
saff*asffsaf
safasffasf

далье он либо каракукли напишет там какие то иероглифы либо как выражается типа выйдет за пределы своей памяяти

Цитата Сообщение от Nameless One Посмотреть сообщение
все работает
а в чем ошибка моего кода??? я хочу разобраться чтоб в будущем ошибок не делать
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.12.2010, 07:25 7
eddilou, если ты хочешь довести до ума именно свой вариант, то я бы посоветовал пройтись по программе с отладчиком. Обычно это дает поразительные результаты
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 07:47  [ТС] 8
Цитата Сообщение от Nameless One Посмотреть сообщение
все работает
проверил написанный вами код и там 7 синтаксических ошибок при компиляции

Добавлено через 2 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
eddilou, если ты хочешь довести до ума именно свой вариант, то я бы посоветовал пройтись по программе с отладчиком. Обычно это дает поразительные результаты
каким отладчиком?? я проверялд ппо строчно и следиил в оке свич за изменением так он тупить в функции ввода все правильно написано а почему так выходит что пи созании более 2 строк начинает делать фиг знает что
поэтому и прошу помощи у вас чтоб понять
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.12.2010, 08:10 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

eddilou, а переполнения буфера не происходит при выполнении ввода функцией gets?
Попробуй заменить ее на fgets(size, 128, stdin)

Цитата Сообщение от eddilou Посмотреть сообщение
проверил написанный вами код и там 7 синтаксических ошибок при компиляции
А чем компилировал? Код должен нормально собираться любым относительно современным компилятором языка С

Добавлено через 15 минут
Цитата Сообщение от eddilou Посмотреть сообщение
проверил написанный вами код и там 7 синтаксических ошибок при компиляции
Прошу прощения, я забыл, что getline - это не стандартная функция языка. Попробуй так:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 128
 
char** input(size_t* nrows)
{
    if(nrows == NULL)
    {
        fprintf(stderr, "You must specify the pointer to store number of rows\n");
        exit(1);
    }
    char**  text = NULL;
    char*   buf;
    size_t  rows = 0;
    puts("Input text (Ctrl+Z or Ctrl+D to stop):");
    while(1)
    {
        buf = NULL;
        if((buf = malloc(SIZE * sizeof(char))) == NULL)
        {
            fprintf(stderr, "Memory allocation failure\n");
            exit(2);
        }
            
        if(fgets(buf, SIZE, stdin) == NULL)
        {
            if(feof(stdin))
                break;
            perror("getline");
            exit(3);
        }
        ++rows;
        if((text = realloc(text, rows * sizeof(char*))) == NULL)
        {
            fprintf(stderr, "Memory allocation failure\n");
            exit(4);
        }
        text[rows - 1] = buf;
    };
    *nrows = rows;
    return text;
}
 
char* processrow(const char* row)
{
    char* buf;
    char* p;
    // Символ '\n' дублировать не будем
    if((buf = calloc(strlen(row) * 2, sizeof(char))) == NULL)
    {
        fprintf(stderr, "Memory allocation failure\n");
        exit(5);
    }
    p = buf;
    while(*row)
    {
        switch(*row)
        {
        case '*':
            ++row;
            break;
            
        case '\n':
            *p++ = *row++;
            break;
            
        default:
            *p++ = *row;
            *p++ = *row++;
        }
    }
    return buf;
}
 
int main()
{
    size_t nrows, i;
    char** text = input(&nrows);
    printf("After processing:...\n");
    for(i = 0; i < nrows; ++i)
    {
        char* buf = processrow(text[i]);
        fputs(buf, stdout);
        free(buf);
        free(text[i]);
    }
    free(text);
    exit(0);
}
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 08:13  [ТС] 10
Цитата Сообщение от Nameless One Посмотреть сообщение
А чем компилировал? Код должен нормально собираться любым относительно современным компилятором языка С
компилировал Borland C еще досовский комплятор на нем проще учиться т.к. меньше навороток и тд
а больше подобных орм компиляторов где соотв старому станадарту не знаю на визуал с++ пробовал не удобно старье не оч он понимает на дев тоже
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.12.2010, 08:15 11
eddilou, попробуй откомпилировать последний вариант программы
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 08:44  [ТС] 12
Цитата Сообщение от Nameless One Посмотреть сообщение
eddilou, а переполнения буфера не происходит при выполнении ввода функцией gets?
Попробуй заменить ее на fgets(size, 128, stdin)


А чем компилировал? Код должен нормально собираться любым относительно современным компилятором языка С
попробовал и три ошибки
посмотри скрин
Миниатюры
Преобразовать текст, удалив все ‘*’ и повторив дважды каждый символ, отличный от ‘*’  
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.12.2010, 12:21 13
Тогда сделаем явное приведение типа для указателей:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 128
 
char** input(size_t* nrows)
{
        if(nrows == NULL)
        {
                fprintf(stderr, "You must specify the pointer to store number of rows\n");
                exit(1);
        }
        char**  text = NULL;
        char*   buf;
        size_t  rows = 0;
        puts("Input text (Ctrl+Z or Ctrl+D to stop):");
        while(1)
        {
                buf = NULL;
                if((buf = (char*) malloc(SIZE * sizeof(char))) == NULL)
                {
                        fprintf(stderr, "Memory allocation failure\n");
                        exit(2);
                }
                        
                if(fgets(buf, SIZE, stdin) == NULL)
                {
                        if(feof(stdin))
                                break;
                        perror("getline");
                        exit(3);
                }
                ++rows;
                if((text = (char**) realloc(text, rows * sizeof(char*))) == NULL)
                {
                        fprintf(stderr, "Memory allocation failure\n");
                        exit(4);
                }
                text[rows - 1] = buf;
        };
        *nrows = rows;
        return text;
}
 
char* processrow(const char* row)
{
        char* buf;
        char* p;
        // Символ '\n' дублировать не будем
        if((buf = (char*) calloc(strlen(row) * 2, sizeof(char))) == NULL)
        {
                fprintf(stderr, "Memory allocation failure\n");
                exit(5);
        }
        p = buf;
        while(*row)
        {
                switch(*row)
                {
                case '*':
                        ++row;
                        break;
                        
                case '\n':
                        *p++ = *row++;
                        break;
                        
                default:
                        *p++ = *row;
                        *p++ = *row++;
                }
        }
        return buf;
}
 
int main()
{
        size_t nrows, i;
        char** text = input(&nrows);
        printf("After processing:...\n");
        for(i = 0; i < nrows; ++i)
        {
                char* buf = processrow(text[i]);
                fputs(buf, stdout);
                free(buf);
                free(text[i]);
        }
        free(text);
        exit(0);
}
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
31.12.2010, 13:42 14
Цитата Сообщение от eddilou Посмотреть сообщение
а в чем ошибка моего кода??? я хочу разобраться чтоб в будущем ошибок не делать
Похвальное желание, грех не помочь.

Если бы ты догадался для начала сделать в main() простейшую отладочную печать
C++
1
2
3
4
5
6
7
  for (int i=0; strlen(text[i])>0; i++)
  {
    printf("\"%s\"\n", text[i]);
//    out=copysim(text[i]);
//    printf("%s", out);
  }
  printf("\n");
для проверки правильности работы vvod(...), то нашел бы, что у тебя сам ввод данных происходит неправильно.

Вот исправленный вариант цикла в vvod(...):
C++
1
2
3
4
5
6
7
8
9
  for (int i=0; len!=0; i++)
  {
    gets(size); len=strlen(size);
 
    txt[i]=(char *)malloc((len+1)*sizeof(char));
    strcpy(txt[i], size);
    if (len>0)
      txt=(char **)realloc(txt,(i+2)*sizeof(char *));
  }
Засада была в том, что индексация то в Си идет с нуля, и realloc(... (i+1)...) размер txt загодя не увеличивает!

Преобразование пока не смотрел.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
31.12.2010, 15:36 15
eddilou, слушай. Крайне НЕХОРОШАЯ ошибка обнаружена в твоём коде в строке
C++
1
 out[j]=0;
Ты используешь переменную j, а она НЕ ОБЪЯВЛЕНА. ТО есть она объявлена, но в цикле
"for",но не ниже. Тем не менее за пределами этого цикла она не должна быть видна. Это ты
прочтёшь в любом учебнике.И если твой компилятор такой ошибки не замечает,
подумай о его замене. Серьёзно говорю тебе.
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 15:47  [ТС] 16
Цитата Сообщение от kravam Посмотреть сообщение
eddilou, слушай. Крайне НЕХОРОШАЯ ошибка обнаружена в твоём коде в строке
C++
1
 out[j]=0;
Ты используешь переменную j, а она НЕ ОБЪЯВЛЕНА. ТО есть она объявлена, но в цикле
"for",но не ниже. Тем не менее за пределами этого цикла она не должна быть видна. Это ты
прочтёшь в любом учебнике.И если твой компилятор такой ошибки не замечает,
подумай о его замене. Серьёзно говорю тебе.
и какой компилятор предлогаете уважаемый??? у меня самый простой досовский комплятор Борланд си
мне нужен тот который хорошо работает в СИ а не в СИ++ и который поддерживает старые стандарты а то в некоторых ваще даже не знают библиотеку стдио ибо она устаревшая
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
31.12.2010, 16:05 17
Ты не ёрничай тут а делай что тебе говорят.
Надо работать не простым, а хорошим компилятором. Для нашего разговора в понятие "хороший" я включаю: "тот, который на корню зарубит твой код из-за того, что переменная j исползуется ВНЕ ЗОНЫ ВИДИМОСТИ"

gcc, язык С. IDE DEV C++ в частности. А вот поддержку старых стандартов не гарантирую
0
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.12.2010, 16:27  [ТС] 18
грубить не надо и указывать тоже
конечно спасибо за советы и помощь но грубить не красиво и яя не ернчиаю а с уважение отношусь к тем кто знает больше чем я вот и все
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
31.12.2010, 17:54 19
НАчнём с теории.
Допустим, ты объявляешь в функции указатель на область памяти, потом выделяешь область
памяти под этот указатель. Вот так, например:
C++
1
2
3
4
5
6
char *out;
int n;
n=strlen(text);
out=(char*)malloc(((2*n)+1)*sizeof(char));
...
return out
И то же смое у теб происходит с переменной txt
C++
1
return txt;
Это и есть засада.
Указатели-то будут доступны в функции main, но вот БУДЕТ ЛИ ДОСТУПНА ОБЛАСТЬ памяти?
Мы ведь помним, что лоакальые переменные доступны только в области видимости.

Это вопрос. По-моему нет, у разных авторов я не встречал этого.
ДО выяснения этого вопроса я бы делал так:
Вообще не объявлял переменные out и txt локальными, а только глобальными.

Это раз. Второе. Сперва выделяешь место под память, потом её инициализируешь,
но не наоборот! ТО есть сперва должна идти функция realloc, потом malloc, а у тебя
по-другому, это ошибка.

Сама функция realloc абсолютно правильна, eddilou, !

И да, оброати внимание на объявление переменной j

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
Окончательный вариант
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
//Вот те самые переменные которые я сделал глобальными
char *out;
char **txt;
char **vvod() {
 
 //у меня DEV C++, экран по-другому очищается
 system("CLS");
 
 //закомментил txt за ненадобностью
 //char **txt;
 char size[128];
 txt=NULL;
 int len=-1;
   txt=(char**)malloc(sizeof(char*));
 for (int i=0; len!=0; i++) {
  
  
   gets(size);
   len=strlen(size);
 
 
   //Вот их я и поменял местами
   txt=(char**)realloc(txt,(i+1)*sizeof(char*));
   txt[i]=(char*)malloc((len+1)*sizeof(char));
 
   strcpy(txt[i], size);
 }
 //Возвращает глобальную переменную,
 //можно было обойтись и без её возврата, раз она глобальная, но ты уж сам додумай, как
 return txt;
}
 
char *copysim(char *text){
 
 //тут где-то было char* out, я убрал 
 
 //Переменную l объявлять здесь!
 int n, j= 0;
 n=strlen(text);
 out=(char*)malloc(((2*n)+1)*sizeof(char));
 
 //Закомментил &&j<(2*n), непонятно зачем оно там было
 for(int i=0; i<n; i++) {
   if (text[i]!='*')   {
     out[j]=text[i];
     j++;
     out[j]=text[i];
     j++;
   }
 }
 out[j]=0;
 
 //тоже возвращает глобальную переменную
 return out;
}
 
int main() {
 txt=vvod();
for (int i=0; strlen(txt[i])!=0; i++){
 out=copysim(txt[i]);
 printf("%s\n", out);
}
getch();
 
}
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
31.12.2010, 20:29 20
Цитата Сообщение от kravam Посмотреть сообщение
Это и есть засада.
Указатели-то будут доступны в функции main, но вот БУДЕТ ЛИ ДОСТУПНА ОБЛАСТЬ памяти?
Мы ведь помним, что локальные переменные доступны только в области видимости.
Динамическая память выделяется в куче, которая не имеет области видимости, доступ осуществляется по известному значению указателя откуда угодно, так что тут все в порядке, не надо нести ахинею.

Другое дело, что ТС потом выделенную динамическую память не освобождает - это, вообще-то, косяк.

Цитата Сообщение от kravam Посмотреть сообщение
сперва должна идти функция realloc, потом malloc
Занесено в цитатник идиотизмов. Советую таки почитать, что делает функция realloc.

Цитата Сообщение от kravam Посмотреть сообщение
Сама функция realloc абсолютно правильна,
Функция realloc всегда правильная, неправильным может быть ее использование. Дык вот, в проге из исходного сообщения обращение к realloc неправильное, как правильно, я показал.

Добавлено через 13 минут
Цитата Сообщение от kravam Посмотреть сообщение
Крайне НЕХОРОШАЯ ошибка обнаружена в твоём коде в строке
C++
1
out[j]=0;
Ты используешь переменную j, а она НЕ ОБЪЯВЛЕНА. ТО есть она объявлена, но в цикле
"for",но не ниже. Тем не менее за пределами этого цикла она не должна быть видна. Это ты
прочтёшь в любом учебнике.И если твой компилятор такой ошибки не замечает,
Да, точно, это известный косяк Борманов, причем не только 3.1-, но и более поздних билдеров. Причем из-за того, что объявленная в локальном блоке переменная живет за его пределами, ее нельзя определить другой раз в другом локальном(не вложенном) блоке - только использовать. Т.е. по человечески в Бормане писать нельзя. Если надо, чтобы код компилировался везде, проще в локальных блоках переменных вообще не определять, а писать как в Си.

Добавлено через 3 минуты
Цитата Сообщение от eddilou Посмотреть сообщение
у меня самый простой досовский комплятор Борланд си
мне нужен тот который хорошо работает в СИ
Ну так и компилируй им Си программы (расширение файлу программы .C поставь), тем более что задание твое Сишное, а C++ в Бормане 3.1 спецефический.
0
31.12.2010, 20:29
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
31.12.2010, 20:29
Помогаю со студенческими работами здесь

Преобразовать строку, удалив каждый символ * и повторив каждый символ, отличный от *
Дана строка. Преобразовать ее, удалив каждый символ * и повторив каждый символ, отличный от *.

Дана строка преобразовать ее удалив каждый символ * и повторив каждый символ отличный от символа *.
помогите одним задачем Дана строка преобразовать ее удалив каждый символ * и повторив каждый...

Дана строка преобразовать ее удалив каждый символ * и повторив каждый символ отличный от символа *
Дана строка преобразовать ее удалив каждый символ * и повторив каждый символ отличный от символа *.

Дана строка. Преобразовать ее, удалив каждый символ (*) и повторив каждый символ, отличный от (*)
Дана строка. Преобразовать ее, удалив каждый символ (*) и повторив каждый символ, отличный от (*)...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru