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

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

Войти
Регистрация
Восстановить пароль
 
 
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
#1

Подскажите, пожалуйста, верно ли решение. - C++

20.08.2011, 01:03. Просмотров 927. Ответов 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
#include <iostream>
 
using namespace std;
 
int main ()
{
cout << "What is your first name? ";
char *first = new char[20];
cin.get(first,20); 
cin.get();
cout << "What is your last name? ";
char *last = new char[20];
cin.get(last,20);
cin.get();
cout << "What letter grade do you deserve? ";
 
 
char piz; //Очень сомневаюсь в правильности здесь
int pizint;
cin >> piz;
pizint=piz;
pizint = pizint+1;
piz=pizint;
 
 
cout << "What is your age? ";
int *age = new int;
cin >> *age;
 
cout << "Name: " << first << " " << last << endl;
cout << "Grade:" << piz << endl << "Age: " << *age; 
 
 delete [] first;
 delete [] last;
 delete age;
 
 
    cout << endl;
    system("PAUSE");
    return 0;
}
0
Миниатюры
Подскажите, пожалуйста, верно ли решение.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2011, 01:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите, пожалуйста, верно ли решение. (C++):

Подскажите пожалуйста решение задачи. - C++
Найти точку D, симметричную точку A относительно стороны BC.

задача на функции со сменным числом параметров. подскажите, пожалуйста решение - C++
Дано натуральное число n (4 &lt;n &lt;10) и целые числа a1, a2, ... an. Посчитать: a1, -a1a2, a1a2a3 ..., (-1) ^ (n + 1) a1a2 ... an;

Проверка. Посмотрите пожалуйста верно ли - C++
Вычислить сумму ряда с погрешностью е=0,0001 в окрестности точки ноль, т.е. при |x|&lt;1:...

Подскажите пожалуйста - C++
Добрый день товарищи программисты. Столкнулся с задачей и никак не могу решить... Точнее её решил, но не совсем по условию. ...

Подскажите пожалуйста - C++
У меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и...

подскажите пожалуйста - C++
вот код программы... ________________ #include &lt;iostream.h&gt; #include &lt;math.h&gt; int A,B,n,N; double...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1913 / 1445 / 113
Регистрация: 29.05.2011
Сообщений: 3,001
20.08.2011, 01:47 #2
Цитата Сообщение от KeyGen Посмотреть сообщение
C++
1
2
3
pizint=piz;
pizint = pizint+1;
piz=pizint;
Такие сложности ни к чему, достаточно просто увеличить piz на единицу. Так
C++
1
piz += 1;
или так
C++
1
++piz;
или ещё как-нибудь

Переменную age можно конечно и динамически создавать, как в этой программе, но зачем?
Да и массивы для строк, раз уж они небольшие и с константным размером, вполне можно было сделать автоматическими. Но это я так...
1
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 02:45 #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
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
cout << "What is your first name? ";
string first;
cin >> first; 
cout << "What is your last name? ";
string last;
cin >> last;
cout << "What letter grade do you deserve? ";
 
 
string piz; 
 
cin >> piz;
// Cделать обработку случая, когда ввели что-то отличное от одной буквы. 
int pizint = int (piz[0]);
piz[0]=char(++pizint);
 
 
cout << "What is your age? ";
string age;
cin >> age;
// Сделать обработку  случая когда ввели не натуральное число. 
cout << "Name: " << first << " " << last << endl;
cout << "Grade: " << piz << endl << "Age: " << age << endl; 
    system("PAUSE");
    return 0;
}
0
grizlik78
Эксперт С++
1913 / 1445 / 113
Регистрация: 29.05.2011
Сообщений: 3,001
20.08.2011, 02:48 #4
Цитата Сообщение от germeticus Посмотреть сообщение
C++
1
2
string first;
cin >> first;
С пробелами неувязочка (см. задание).
1
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 03:10 #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
С пробелами неувязочка (см. задание).
Ага, спасибо, вот его я и не посмотрел.

Тогда так, хотя конечно эстетичность кода несколько нарушена:
C++
1
2
3
4
5
6
7
cout << "What is your first name? ";
string first;
getline(cin, first);
 
cout << "What is your last name? ";
string last;
getline(cin, last);
1
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 11:30 #6
Цитата Сообщение от KeyGen Посмотреть сообщение
char piz; //Очень сомневаюсь в правильности здесь
int pizint;
cin >> piz;
pizint=piz;
pizint = pizint+1;
piz=pizint;
Всё нормально здесь, ты вводишь char а в pizint получишь числовое значение введенного тобой символа по ASCII. к примеру ты вёл '0' - код нуля если не изменяет память 48, тогда
piz = '0';
pizint = 48;
pizint = pizint+1;//тут можно pizint++;
получаем pizint = 49;
piz = pizint;//всё равно что piz = (char)49;(char)49 == '1';
В итоге при выводе piz отобразиться '1'

Цитата Сообщение от KeyGen Посмотреть сообщение
int *age = new int;
cin >> *age;
- так нельзя, либо пиши int age либо int *age = new int[1];
в первом случае будешь работать с числом, во втором с массивом из 1-го элемента, задание сейчас реализую в своём видении (причём ввод нескольких слов стркоу лучше выполнять scanf - ом)
1
grizlik78
Эксперт С++
1913 / 1445 / 113
Регистрация: 29.05.2011
Сообщений: 3,001
20.08.2011, 11:46 #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
так нельзя
Запрещаешь? С чего бы вдруг? Ну неэффективно, ну коряво, но почему нельзя?
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 12:17 #8
Вот мой вариант решения
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 <conio.h>
 
int main()
{
    int age;
    char first[32] = {0}, last[32] = {0}, grade;
    printf("What is your first name? ");
    scanf("%[^\n]%c",first,&grade);
    printf("What is your last name? ");
    scanf("%[^\n]%c",last,&grade);
    printf("What letter grade do you deserve? ");
    scanf("%c",&grade);
    printf("What is your age? ");
    scanf("%d",&age);
 
    printf("Name : %s, %s\r\n",last,first);
    printf("Grade: %c\r\n",(grade + 1));
    printf("Age  : %d\r\n",age);
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
[Результат работы программы]
What is your first name? Betty Sue
What is your last name? Yew
What letter grade do you deserve? B
What is your age? 22
Name : Yew, Betty Sue
Grade: C
Age : 22
Press any key to continue


Добавлено через 11 минут
Цитата Сообщение от grizlik78 Посмотреть сообщение
Запрещаешь? С чего бы вдруг?
- ты сам ответил
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну неэффективно, ну коряво
1
grizlik78
Эксперт С++
1913 / 1445 / 113
Регистрация: 29.05.2011
Сообщений: 3,001
20.08.2011, 12:20 #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты сам ответил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
либо int *age = new int[1];
Можено подумать, что
C++
1
int *age = new int[1];
Хоть чуточку эффективнее или менее коряво.
Не стоит и нельзя — совсем не одно и то же.
1
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 13:16 #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- так нельзя, либо пиши int age либо int *age = new int[1];
в первом случае будешь работать с числом, во втором с массивом из 1-го элемента,
Очень даже нужно. Посмотрите хоть в Липпмане. Мы либо динамически выделяем память под переменную, либо под массив.

int *A = new int;
string *A = new string;

И все в таком духе.
1
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
20.08.2011, 16:15  [ТС] #11
А можно ли это:
C++
1
2
3
4
5
6
...
cout << "What letter grade do you deserve? ";
char piz;
cin >> piz;
++piz;
...
Оформить enum-ом или массивом чтобы при вводе "C" выводилась "A" или без if не обойтись.
0
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 18:56 #12
Чтобы буквы менялись циклически? Тогда if пожалуй.
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 19:24 #13
Цитата Сообщение от KeyGen Посмотреть сообщение
Оформить enum-ом или массивом чтобы при вводе "C" выводилась "A" или без if не обойтись.
- можно switch использовать
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 19:33 #14
Вот "адская смесь" enum и switch
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
#include <stdio.h>
#include <conio.h>
 
enum GRADE {A = 'B',B,C,D,E,F = 'A'} GRADE;
 
int main()
{
    int age;
    char first[32] = {0}, last[32] = {0}, grade;
    printf("What is your first name? ");
    scanf("%[^\n]%c",first,&grade);
    printf("What is your last name? ");
    scanf("%[^\n]%c",last,&grade);
    printf("What letter grade do you deserve? ");
    scanf("%c",&grade);
    printf("What is your age? ");
    scanf("%d",&age);
 
    printf("Name : %s, %s\r\n",last,first);
//  printf("Grade: %c\r\n",(grade + 1));
    enum GRADE pGRADE;
    switch(grade){
    case 'A':
        pGRADE = A;
        break;
    case 'B':
        pGRADE = B;
        break;
    case 'C':
        pGRADE = D;
        break;
    case 'D':
        pGRADE = D;
        break;
    case 'E':
        pGRADE = E;
        break;
    case 'F':
        pGRADE = F;
        break;
    }
    printf("Grade: %c\r\n",pGRADE);
    printf("Age  : %d\r\n",age);
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
0
Миниатюры
Подскажите, пожалуйста, верно ли решение.  
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 19:36 #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
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int age;
    char first[32] = {0}, last[32] = {0}, grade;
    printf("What is your first name? ");
    scanf("%[^\n]%c",first,&grade);
    printf("What is your last name? ");
    scanf("%[^\n]%c",last,&grade);
    printf("What letter grade do you deserve? ");
    scanf("%c",&grade);
    printf("What is your age? ");
    scanf("%d",&age);
 
    printf("Name : %s, %s\r\n",last,first);
    switch(grade){
    case 'A':
        grade = 'B';
        break;
    case 'B':
        grade = 'C';
        break;
    case 'C':
        grade = 'D';
        break;
    case 'D':
        grade = 'E';
        break;
    case 'E':
        grade = 'F';
        break;
    default:
        grade = 'A';
        break;
    
    }
    printf("Grade: %c\r\n",grade);
    printf("Age  : %d\r\n",age);
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
Результат работы тот же, что и в примерах выше
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2011, 19:36
Привет! Вот еще темы с ответами:

Подскажите пожалуйста! - C++
Какая задача у этого кода? // &lt;DFM&gt; TFORM2 = class(TForm); object Form2: TForm2 Left = 0 Top = 0 ClientHeight = 2 ...

Подскажите пожалуйста - C++
Здравствуйте, я нашел длину каждого слова в строке, а как теперь вывести максимальную длину (т.е. то слово в строке, которое имеет...

Подскажите пожалуйста!!! - C++
Написал код на dev-c++ и на коде написал по русски например: &quot;Введите число: &quot; потом компилировал ошибок не было, но там по русски &quot;Введите...

Подскажите пожалуйста - C++
Нужно ввести в 1 строковую переменную или символьный массив текст из файла с абзацами.Как это реализовать?


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

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

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