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

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

Восстановить пароль Регистрация
 
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
20.08.2011, 01:03     Подскажите, пожалуйста, верно ли решение. #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
#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;
}
Миниатюры
Подскажите, пожалуйста, верно ли решение.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2011, 01:03     Подскажите, пожалуйста, верно ли решение.
Посмотрите здесь:

C++ Подскажите решение
C++ Подскажите пожалуйста
Подскажите пожалуйста C++
C++ Подскажите, пожалуйста
C++ Подскажите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
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 можно конечно и динамически создавать, как в этой программе, но зачем?
Да и массивы для строк, раз уж они небольшие и с константным размером, вполне можно было сделать автоматическими. Но это я так...
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;
}
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2011, 02:48     Подскажите, пожалуйста, верно ли решение. #4
Цитата Сообщение от germeticus Посмотреть сообщение
C++
1
2
string first;
cin >> first;
С пробелами неувязочка (см. задание).
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);
-=ЮрА=-
Заблокирован
Автор 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 - ом)
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2011, 11:46     Подскажите, пожалуйста, верно ли решение. #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
так нельзя
Запрещаешь? С чего бы вдруг? Ну неэффективно, ну коряво, но почему нельзя?
-=ЮрА=-
Заблокирован
Автор 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 Посмотреть сообщение
Ну неэффективно, ну коряво
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2011, 12:20     Подскажите, пожалуйста, верно ли решение. #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты сам ответил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
либо int *age = new int[1];
Можено подумать, что
C++
1
int *age = new int[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;

И все в таком духе.
KeyGen
 Аватар для KeyGen
333 / 289 / 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 не обойтись.
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 18:56     Подскажите, пожалуйста, верно ли решение. #12
Чтобы буквы менялись циклически? Тогда if пожалуй.
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2011, 19:24     Подскажите, пожалуйста, верно ли решение. #13
Цитата Сообщение от KeyGen Посмотреть сообщение
Оформить enum-ом или массивом чтобы при вводе "C" выводилась "A" или без if не обойтись.
- можно switch использовать
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Подскажите, пожалуйста, верно ли решение.  
-=ЮрА=-
Заблокирован
Автор 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;
}
Результат работы тот же, что и в примерах выше
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2011, 21:01     Подскажите, пожалуйста, верно ли решение. #16
Цитата Сообщение от KeyGen Посмотреть сообщение
Оформить enum-ом или массивом чтобы при вводе "C" выводилась "A" или без if не обойтись.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cctype>
 
using namespace std;
 
int main()
{
    cout << "What letter grade do you deserve? ";
    char piz;
    cin >> piz;
    char const *grades = "ACBA";
 
    int idx = 1;
    while (grades[idx] && grades[idx] != toupper(piz))
        ++idx;
 
    cout << grades[idx - 1] << endl;
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2011, 21:09     Подскажите, пожалуйста, верно ли решение.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 21:09     Подскажите, пожалуйста, верно ли решение. #17
Гм...

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);
        if (grade == 'F') grade = 'A' -1   ;
        printf("Grade: %c\r\n", ++grade);
        printf("Age  : %d\r\n",age);
        printf("Press any key to continue\r\n");
        getch();
        return 0;
}
Yandex
Объявления
20.08.2011, 21:09     Подскажите, пожалуйста, верно ли решение.
Ответ Создать тему
Опции темы

Текущее время: 16:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru