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

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

Войти
Регистрация
Восстановить пароль
 
 
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
#1

Список - C++

20.04.2010, 18:27. Просмотров 670. Ответов 16
Метки нет (Все метки)

Написать программу на Си, которая инвертирует список из целых чисел. Числа читаються из текстового файла и результат выводиться на экран!

ПОМОГИТЕ ПЛИИИЗ! ЗА РАНЕЕ СПАСИБО!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2010, 18:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список (C++):

Создать список L3 из элементов, входящих и в список L1 и в список L2 - C++
создать список л3 из элементов входящих и в список л1 и в список л2

3 класса: список, стек(как список), очередь(как список) - C++
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление, удаление. Использовать при обращении указатель...

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

Вводится число N. Создать список его делителей и вывести список на экран - C++
#include<iostream> #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> using namespace std; struct...

list. Cоздать список из результатов(с массивами), а потом просмотреть весь список - C++
Подскажите пожалуйста как мне создать список из моих результатов(с массивами) а потом просмотреть весь список, вот код который имеется ...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список - C++
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
21.04.2010, 20:15 #2
Цитата Сообщение от Orlanxxx Посмотреть сообщение
инвертирует список из целых чисел
В каком смысле? числа из файла от последнего к первому выводит, или цифры в числах задом на перёд меняет?
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
21.04.2010, 20:17  [ТС] #3
Цитата Сообщение от easybudda Посмотреть сообщение
В каком смысле? числа из файла от последнего к первому выводит, или цифры в числах задом на перёд меняет?
К примеру в файле числа 12345, а нам нужно в таком случае вывести 54321!
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
21.04.2010, 20:26 #4
1. тогда не числа, а цифры из файла.
2. нужно проверять, что там кроме цифр ничего нет?
3. если файл содержит только идущие подряд цифры и сам не длиннее 2 гигов, то проще его в одну большую строку скопировать и задом на перёд её вывести...
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
21.04.2010, 20:29  [ТС] #5
Цитата Сообщение от easybudda Посмотреть сообщение
1. тогда не числа, а цифры из файла.
2. нужно проверять, что там кроме цифр ничего нет?
3. если файл содержит только идущие подряд цифры и сам не длиннее 2 гигов, то проще его в одну большую строку скопировать и задом на перёд её вывести...
Надо проверять что бы числа были обязательно целыми!!!! Ну попробуй так плиииз и кинь текст проги!!! Я чет не догоняюю что ты хочешь... Точнее как это сделать! Попробуй пожалуйста!
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
21.04.2010, 21:10 #6
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define FNAME "numbers.txt"
 
int main(void){
    FILE *f;
    char *buf, *p;
    long len;
 
    if ( ( f = fopen(FNAME, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    if ( len < 1 ){
        perror("bad file");
        exit(1);
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len + 1) ) == NULL ){
        perror("malloc");
        exit(1);
    }
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        exit(1);
    }
    fclose(f);
    buf[len] = '\0';
 
    for ( p = buf; *p; ++p ){
        if ( !isdigit(*p) && !isspace(*p) ){
            fprintf(stderr, "AHTUNG! Niht das zifra! - %c\n", *p);
            exit(1);
        }
    }
    for ( --p; p >= buf; --p )
        printf("%c", *p);
    printf("\n");
 
    exit(0);
}

Не по теме:

Цитата Сообщение от Orlanxxx Посмотреть сообщение
Я чет не догоняюю что ты хочешь...
Виллу хочу на Канарах. Посодействуешь?

Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
22.04.2010, 17:48  [ТС] #7
Цитата Сообщение от easybudda Посмотреть сообщение
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define FNAME "numbers.txt"
 
int main(void){
    FILE *f;
    char *buf, *p;
    long len;
 
    if ( ( f = fopen(FNAME, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    if ( len < 1 ){
        perror("bad file");
        exit(1);
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len + 1) ) == NULL ){
        perror("malloc");
        exit(1);
    }
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        exit(1);
    }
    fclose(f);
    buf[len] = '\0';
 
    for ( p = buf; *p; ++p ){
        if ( !isdigit(*p) && !isspace(*p) ){
            fprintf(stderr, "AHTUNG! Niht das zifra! - %c\n", *p);
            exit(1);
        }
    }
    for ( --p; p >= buf; --p )
        printf("%c", *p);
    printf("\n");
 
    exit(0);
}

Не по теме:


Виллу хочу на Канарах. Посодействуешь?

Ахах XD рад бы да у самого одна осталась)))
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
28.04.2010, 14:03  [ТС] #8
easybudda, можешь помочь? ТУт чутка не так, она у тебя берет и все переварачивает!!! К примеру в тексте 1 2 3 4 5 и она выдает 5 4 3 2 1! Это хорошо, но вот 12 23 34 она выдает 43 32 21, а НАДО что бы 34 23 12!!! Помоги плыЗ)
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
28.04.2010, 16:14 #9
Цитата Сообщение от Orlanxxx Посмотреть сообщение
ТУт чутка не так, она у тебя берет и все переварачивает!
Так я ж тебя два раза переспрашивал! Диржы!
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define FNAME "numbers.txt"
 
void reverse_buf(char* buf, size_t cnt){
    char *pHead, *pTail;
    char tmp;
    for ( pHead = buf, pTail = buf + cnt - 1; pHead < pTail; ++pHead, --pTail ){
        tmp = *pHead;
        *pHead = *pTail;
        *pTail = tmp;
    }
}
 
int main(void){
    FILE *f;
    char *buf, *p, *pStartNum;
    long len;
    int flag;
 
    if ( ( f = fopen(FNAME, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    if ( len < 1 ){
        perror("bad file");
        exit(1);
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len + 1) ) == NULL ){
        perror("malloc");
        exit(1);
    }
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        exit(1);
    }
    fclose(f);
    buf[len] = '\0';
 
    flag = 0;
    for ( p = buf; *p; ++p ){
        if ( isdigit(*p) ){
            if ( !flag ){
                flag = 1;
                pStartNum = p;
            }
        }
        else if ( isspace(*p) ){
            if ( flag ){
                reverse_buf(pStartNum, p - pStartNum);
                flag = 0;
            }
        }
        else {
            fprintf(stderr, "Invalid symbol - '%c'!\n", *p);
            exit(1);
        }
    }
 
    printf("%s\n", buf);
 
    free(buf);
    exit(0);
}
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
28.04.2010, 17:28  [ТС] #10
Цитата Сообщение от easybudda Посмотреть сообщение
Так я ж тебя два раза переспрашивал! Диржы!
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define FNAME "numbers.txt"
 
void reverse_buf(char* buf, size_t cnt){
    char *pHead, *pTail;
    char tmp;
    for ( pHead = buf, pTail = buf + cnt - 1; pHead < pTail; ++pHead, --pTail ){
        tmp = *pHead;
        *pHead = *pTail;
        *pTail = tmp;
    }
}
 
int main(void){
    FILE *f;
    char *buf, *p, *pStartNum;
    long len;
    int flag;
 
    if ( ( f = fopen(FNAME, "rb") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    if ( len < 1 ){
        perror("bad file");
        exit(1);
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len + 1) ) == NULL ){
        perror("malloc");
        exit(1);
    }
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        exit(1);
    }
    fclose(f);
    buf[len] = '\0';
 
    flag = 0;
    for ( p = buf; *p; ++p ){
        if ( isdigit(*p) ){
            if ( !flag ){
                flag = 1;
                pStartNum = p;
            }
        }
        else if ( isspace(*p) ){
            if ( flag ){
                reverse_buf(pStartNum, p - pStartNum);
                flag = 0;
            }
        }
        else {
            fprintf(stderr, "Invalid symbol - '%c'!\n", *p);
            exit(1);
        }
    }
 
    printf("%s\n", buf);
 
    free(buf);
    exit(0);
}

Спасиб я наверн тебя не понимал =] С меня вилла на Канарах))

Добавлено через 4 минуты

Но тока она что-то не инвертирует((( Просто выдает числа!!!
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
28.04.2010, 18:03 #11
Цитата Сообщение от Orlanxxx Посмотреть сообщение
Но тока она что-то не инвертирует
пустую строку в конце файла добавь
Список
ну или отслеживай ситуацию, когда строка кончилась, а последнее число в ней ещё не обработано
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
28.04.2010, 18:12  [ТС] #12
Цитата Сообщение от easybudda Посмотреть сообщение
пустую строку в конце файла добавь
Вложение 28279
ну или отслеживай ситуацию, когда строка кончилась, а последнее число в ней ещё не обработано
Спасиб

Добавлено через 7 минут
Цитата Сообщение от easybudda Посмотреть сообщение
пустую строку в конце файла добавь
Вложение 28279
ну или отслеживай ситуацию, когда строка кончилась, а последнее число в ней ещё не обработано
ЧТо-то я ничего не понял.... Что сделать то надо!? Я добавил строчку в коец а толку нет! Как отслеживать?
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
28.04.2010, 18:24 #13
Orlanxxx, что-то не так делаешь... Входной файл покажи.
Orlanxxx
4 / 1 / 0
Регистрация: 11.10.2009
Сообщений: 153
28.04.2010, 18:27  [ТС] #14
Цитата Сообщение от easybudda Посмотреть сообщение
пустую строку в конце файла добавь
Вложение 28279
ну или отслеживай ситуацию, когда строка кончилась, а последнее число в ней ещё не обработано
Тут не так что то ввожу в файл чила 1 2 10 20 а он мне 1 2 01 20!!! НЕ ТАК ЧТО ТО!!! ДОЛЖНО 20 10 2 1! ИНВЕРТИРОВАТЬ ОН ДОЛЖЕН!!!! ТОЕСТЬ С ГОЛОВЫ НА НОГИ ПЕРЕВЕРНУТЬ ЧИСЛА!!! А НЕ 20 02! ТАк 20 и должно как бэ остаться!! я ввожу 1 2 3 4 5 6 7 8 9 10 11 12 13 а он мне 13 12 11 10 9 8 7 6 5 4 3 2 1 ВОТ ТАК ДОЛЖНО БЫТЬ!!!! У ТЕБЯ ТАК РАЗВЕ?!?!?
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
28.04.2010, 19:21 #15
м-да, не задалось что-то... вот так тупо числа из файла в обратной последовательности выводит
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
#include <stdio.h>
#include <stdlib.h>
 
#define FILE_NAME "numbers.txt"
int main(void){
    int *arr = NULL;
    int size = 0, i, num;
    FILE *f;
 
    if ( ( f = fopen(FILE_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    while ( fscanf(f, "%d", &num) == 1 ){
        if ( ( arr = (int*)realloc(arr, (size + 1) * sizeof(int)) ) == NULL ){
            perror("realloc");
            exit(1);
        }
        arr[size++] = num;
    }
    if ( ferror(f) ){
        perror("ferror");
        exit(1);
    }
    if ( fclose(f) ){
        perror("fclose");
        exit(1);
    }
 
    while ( --size > -1 )
        printf("%d ", arr[size]);
 
    free(arr);
    printf("\n");
    exit(0);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2010, 19:21
Привет! Вот еще темы с ответами:

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. - C++
Друзья помогите с реализацией списка. Нужно запрограммировать связный список, в котором информация о книгах сортируется по убыванию...

Необходимо создать список, элемент которого может быть список - C++
Всем доброго времени суток! Стоит следующая задача: необходимо создать список, элемент которого может быть список (да да, звучит...

Двусвязный список (в конец двусвязного списка добавить другой список) - C++
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

Напечатать пронумерованный список список первых 10 наиболее популярных газет - C++
опросили 200 подписчиков. Каждый из них назвал 3 любимые газеты. Напечатать пронумерованный список список первых 10 наиболее популярных...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.04.2010, 19:21
Ответ Создать тему
Опции темы

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