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

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

Войти
Регистрация
Восстановить пароль
 
NataIIIka
0 / 0 / 0
Регистрация: 22.12.2010
Сообщений: 10
#1

=( - C++

22.12.2010, 22:07. Просмотров 298. Ответов 8
Метки нет (Все метки)

Уважаемые программисты. В универе задали написать программу на си, а этот язык я знаю плохо. Помогите пожалуйста).
Суть программы:
После запуска программы, нужно ввести ряд символов. Затем следует ввести номер символа, после которого программа разделит этот ряд на 2 части, и поменяет их местами. Пример: ряд чисел - (145257), н символа - 3 , результат - (257145).
pm при написании программы нельзя использовать дополнительную память . Заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
23.12.2010, 11:14     =( #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
42
43
44
45
46
47
48
49
50
#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
void init(char *arr, int size);
void print(char *arr, int size);
void shift(char *arr, int size);
 
int main(int argc, char *argv[])
{    
    int p, n;    
    char arr[50];
    cout << "Enter a number of symbols : ";
    cin >> arr;
    n=strlen(arr); 
       
    print(arr, n);
    cout << "Etner num : ";
    cin >> p;
    if(p>=n) 
    {
        cout << "Nedopustimoe znachenie!\n";
        system("PAUSE");
        return EXIT_SUCCESS;
                
    }
    
    for(int i=0; i<p; i++)        
       shift(arr, n);    
   
    print(arr, n);
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
void print(char *arr, int size)
{
    for(char i=0; i<size; i++)
       cout << arr[i];
    cout << "\n";
}
void shift(char *arr, int size)
{
    int temp = arr[0];
    for(int i=0; i<size-1; i++)
       arr[i] = arr[i+1];
    arr[size-1] = temp;
}
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.12.2010, 11:28     =( #3
grrrrr, программа не работает. Для чего вы сделали так
C++
1
2
3
4
char arr[50];
    cout << "Enter a number of symbols : ";
    cin >> arr;
    n=strlen(arr);
?
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
23.12.2010, 11:38     =( #4
NNN777, не работает в смысле не компилируется или неправильно выдает результат?.
Цитата Сообщение от NNN777 Посмотреть сообщение
Для чего вы сделали так
это сделал, чтобы узнать длину строки.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.12.2010, 11:46     =( #5
Компилируется, но результат неправильный выводит, ну или я что-то не так понимаю...
эти строчки
C++
1
2
cout << "Enter a number of symbols : ";
    cin >> arr;
просят ввести число символов или сами символы? если количество, то зачем в массив char'ов? если сами элементы массива, то непонятно -
C++
1
cin >> arr;
считывает только один символ... а если все же принимать элементы в строку (массив символов) то
C++
1
n=strlen(arr);
посчитает общее количество вместе с пробелами...
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
23.12.2010, 11:56     =( #6
В задании написано

Цитата Сообщение от NataIIIka Посмотреть сообщение
После запуска программы, нужно ввести ряд символов. Затем следует ввести номер символа, после которого программа разделит этот ряд на 2 части, и поменяет их местами.
программа работает. Возможно я не правильно понял задание. Вывод же правильный.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.12.2010, 12:06     =( #7
Если работает, то хорошо)... у меня просто он строку не считывает... (стоит VS2008), думаю, т.к.
C++
1
cin >> arr;
считывает только один символ, чтобы считать строку есть команда
C++
1
cin.getline(массив, размер)
, но повторюсь
C++
1
 n=strlen(arr);
посчитает длинну строки вместе с пробелами...
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
23.12.2010, 12:13     =( #8
NNN777, у меня все нормально считывает, стоит wxdev-C++.
Цитата Сообщение от NNN777 Посмотреть сообщение
но повторюсь, посчитает длинну строки вместе с пробелами...
если тебе так не нравятся пробелы, можно добавить:
C++
1
2
for(i=0; i<n; i++)
   if(arr[i] = ' ') return 0;
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
23.12.2010, 14:32     =( #9
В продолжение слов grrrrr о циклическом сдвиге массива, все-таки тоже скину свой вариант
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
const int SIZE=100;
 
int input(int[], int);
void print(int mas1[], int size);
int main() 
{
    int a[SIZE];
    int n, p, i, buf, j;
 
    p=input (a, SIZE);  
    cout<<endl;
 
    cout<<"massiv: \n";
    print (a, p);
    do {
        cout<<"Vvedite n: ";
        cin>>n;
        } 
    while(n<0||n>p);
    //циклический сдвиг массива
    for (j=0; j<p-n-1; j++)
    {
        buf=a[p-1];
        for (i=p-1; i>0; i--)
            a[i]=a[i-1];
        a[0]=buf;
            
    }   
    cout<<"\nRezultat: \n";
    print (a, p);
}
int input(int mas[], int size) 
{   
    int n=0;
    do {
        cout<<"Vvedite kolichestvo elementov: ";
        cin>>n;
        } 
    while(n<1||n>size);
    cout<<"Vvedite "<<n<<" chisel: "<<endl;
    int k=0;
    while((k<n)&&(cin>>mas[k]))
        k++;
    return k;
}
void print(int mas1[], int size)
{
    for (int i=0; i<size; i++)
        cout<<mas1[i]<<" ";
    cout<<endl;
}
Yandex
Объявления
23.12.2010, 14:32     =(
Ответ Создать тему
Опции темы

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