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

Как вводить в массивы переменные, различную символьную информацию - C++

Восстановить пароль Регистрация
 
Siferot
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 12
09.04.2012, 18:19     Как вводить в массивы переменные, различную символьную информацию #1
Всем доброго времени суток. Совсем недавно начал изучать самостоятельно язык C++ и уже появляются различного рода вопросы. Сейчас сижу на массивах. Тема как для меня лично сложная, не знаю ли, будет еще сложней какая-нибудь тема, но нужна сейчас именно помощь по массивам.

Задач в учебнике много и я думаю по каждой будет появляться вопросы и чтобы не плодить много тем, буду спрашить все вопросы в одной (этой), если так разрешено.

А теперь к вопросам:

1) Как вводить в массивы переменные, различную символьную информацию?

2) Помощь по задаче: "Напишите программу, которая запрашивает у пользователя
номер месяца и затем выводит соответствующее название времени года."

В принципе, это можно сделать четвермя IF'ами, но мне именно хочется массивом попробовать, если здесь вообще это возможно.

Нацарапал такую ерунду и естественно она не работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main(){
    
    char yanvar,fevral,mart,aprel,may,iun,iul,avgust,sentabr,oktabr,noyabr,dekabr;
    
    int mesyac[13] = {yanvar,fevral,mart,aprel,may,iun,iul,avgust,sentabr,oktabr,noyabr,dekabr};
 
 cout << "Vvedite mesyac(nomer: ot 1 do 12): ";
 cin >> mesyac[13];
 
 
getch();
 
      }
Может быть многие будут смеяться с этого бреда, но мне пофигу. Программа конечно недоделана, так как непонятно вообще, как ее доделать. Надеюсь на помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 18:19     Как вводить в массивы переменные, различную символьную информацию
Посмотрите здесь:

Развернуть массив, не используя дополнительные массивы и переменные C++
C++ как правильно вводить строковые массивы из файла?
C++ Как вводить массивы?
Строковые переменные (символьные массивы) C++
Динамические массивы: Вводить с клавиатуры элементы, пока значение не окажется равным сумме уже введенных значений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
09.04.2012, 19:02     Как вводить в массивы переменные, различную символьную информацию #2
Я конечно извиняюсь ,я тоже новичек ,но ,как я думаю ,размер массива определяется количеством всех символов и + 1 .Вопрос :а как прога поймет какие символы с массива выводить? Это же один массив . Тут либо переменные нужны либо массивы под каждый месяц. Если что прошу прощения .Сам недавно начал.
ipsum93
Сообщений: n/a
09.04.2012, 19:20     Как вводить в массивы переменные, различную символьную информацию #3
нумерация индексов в С + + идет с 0,
главная ошибка здесь это то, что вы вылезли за пределы массива, массив занимает 13 байт значит у вас есть индексы 0 .. 12
а вы обращаетесь к 13 которого не существует
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
09.04.2012, 19:28     Как вводить в массивы переменные, различную символьную информацию #4
Siferot, вы по какой литературе изучаете?
Вам надо вернуться к главе типы данных, вы явно в ней не разобрались.
То, что вы здесь написали даже "кашей в голове" сложно назвать. У вас нет представления об основах программирования (не о конкретном языке).

В зависимости от вида данных в программе объявляются переменные (или массивы) соответствующих типов: char для символов, int для целых чисел и т.д.
Чтобы хранить строки(слова) надо объявить массив символов, например:
C++
1
char month[12][10] = {"January", "February, /*и т.д.*/};
001_alex
9 / 13 / 1
Регистрация: 07.04.2012
Сообщений: 56
09.04.2012, 20:06     Как вводить в массивы переменные, различную символьную информацию #5
Вот держи :
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
#include <vcl.h>
#include <stdio.h>
#include <conio.h>
 
void main()
{
int a;
clrscr();
printf("Vvedite nomer mesyca ");
scanf("%d",&a);
switch (a)
  {
        case 0:
        case 1: printf("\n yanvar");  break;
        case 2: printf("\n fevral"); break;
        case 3: printf("\n mart"); break;
        case 4: printf("\n aprel");break;
        case 5: printf("\n may"); break;
        case 6: printf("\n iun"); break;
        case 7: printf("\n iul"); break;
        case 8: printf("\n avgust"); break;
        case 9: printf("\n sentabr"); break;
        case 10: printf("\n oktabr"); break;
        case 11: printf("\n noyabr"); break;
        case 12: printf("\n dekabr"); break;
  }
  getch();
return;
}
По поводу массивов:
Есть два вида массивов 1. числовой 2. символьный
1.числовой делится на
а) просто массив, только строки(представляет собой строку : 1 2 3 4
Ввод (димическое выделение памяти под массив)
C++
1
2
3
4
5
6
7
8
9
     int i;
     printf("Vvedite razmernost' -> ");
     scanf("%d", n);
     int *A = new int [*n];
       for (i=0; i<*n; i++)
     {
       printf(" A[%d]= ", i);
       scanf("%d", &A[i]);
     }
б)матрица( строки и столбцы) :
1 2
3 4
Ввод (димическое выделение памяти под матрицу)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      
      int i,j;
      int **A=new int* [*n];
     clrscr( );
     printf("Vvedite razmernost` -> ");
     scanf("%d", n);
       for (i=0; i<*n; i++)
          A[i]=new int [*n];
       for (i=0; i<*n; i++)
       for (j=0; j<*n; j++)
     {
        printf("\n A[%d][%d]=", i+1, j+1);
            scanf("%d", &A[i][j]);
     }
2. символьный(то что вы спрашивали)
Ввод
C++
1
2
3
  char a[82];
  puts("Vvedite stroku(na angliyskom):");
  gets(a);
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.04.2012, 20:14     Как вводить в массивы переменные, различную символьную информацию #6
Цитата Сообщение от 001_alex Посмотреть сообщение
int i,j;
* * * int **A=new int* [*n];
* * *clrscr( );
* * *printf("Vvedite razmernost` -> ");
* * *scanf("%d", n);
* * * *for (i=0; i<*n; i++)
* * * * * A[i]=new int [*n];
* * * *for (i=0; i<*n; i++)
* * * *for (j=0; j<*n; j++)
* * *{
* * * * printf("\n A[%d][%d]=", i+1, j+1);
* * * * * * scanf("%d", &A[i][j]);
* * *}
Довольно странный код.
Почему размер массива читается из какого-то указателя?
ИМХО *n только запутает новичка, нетвёрдо знающего указатели.
Выделяй двумерный массив n*m так:
C++
1
2
3
int** A=new int* [n];
A[0]=new int[n*m];
for(i=0; i<n; i++) A[i]=A[0]+i*m;
его и освобождать проще в таком виде
C++
1
2
delete[] A[0];
delete[] A;
А в твоем варианте придется в цикле delete вызвать
001_alex
9 / 13 / 1
Регистрация: 07.04.2012
Сообщений: 56
09.04.2012, 20:36     Как вводить в массивы переменные, различную символьную информацию #7
Kuzia domovenok
Написал так как нас учили, из методички скопировал!
Siferot
С помощью массива можно зделать эту задачу!
Используя символьный массив, записать в него все месяца через пробел(сначала тоже поставить пробел), а при вводе числа, считать кол-во пробелов!
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.04.2012, 20:49     Как вводить в массивы переменные, различную символьную информацию #8
Цитата Сообщение от 001_alex Посмотреть сообщение
Написал так как нас учили, из методички скопировал!
Настоятельно советую оценить красоту решения. Всё-таки согласись, что это лучше чем N вызовов new и соответственно фрагментация твоего 2D массива
001_alex
9 / 13 / 1
Регистрация: 07.04.2012
Сообщений: 56
09.04.2012, 20:53     Как вводить в массивы переменные, различную символьную информацию #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Настоятельно советую оценить красоту решения. Всё-таки согласись, что это лучше чем N вызовов new и соответственно фрагментация твоего 2D массива
Учусь, не всё сразу даётся, соглашусь!

Не по теме:

Просто учусь заочно, и унас на С++, было пар 7, и всё
А чего у меня реитинг минусовой

antoha398
09.04.2012, 20:58
  #10

Не по теме:


Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
int** A=new int* [n]; A[0]=new int[n*m];
Kuzia domovenok, объясните чем тогда это отличается от
C++
1
int *A = new int[n*m];

Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.04.2012, 21:04     Как вводить в массивы переменные, различную символьную информацию #11
Цитата Сообщение от antoha398 Посмотреть сообщение
Kuzia domovenok, объясните чем тогда это отличается от
Код C++
1
int *A = new int[n*m];
тем, что в твоём случае обращаться к элементу i,j надо A[i*m+j];
А в моём надо как A[i][j]
Твой А имеет тип int*
А мой int**
А в остальном не особо сильно
А ты что думал? память у компьютера линейная, массивы все в ней развёрнуты в линию. Понятия N-мерные массивы это уже для удобства восприятия
Siferot
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 12
11.04.2012, 08:05  [ТС]     Как вводить в массивы переменные, различную символьную информацию #12
C++
1
char month[12][10] = {"January", "February, /*и т.д.*/};
Почему в массиве находится две размерности? 12 и 10? Так нужно? Ведь месяцев всего 12.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.04.2012, 09:38     Как вводить в массивы переменные, различную символьную информацию #13
Цитата Сообщение от Siferot Посмотреть сообщение
C++
1
char month[12][10] = {"January", "February, /*и т.д.*/};
Почему в массиве находится две размерности? 12 и 10? Так нужно? Ведь месяцев всего 12.
Потому что это массив символов. Т.е. у тебя хранится 12 месяцев (по 10-1 букв максимум каждый (последний символ нужен для символа '\0').
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 09:54     Как вводить в массивы переменные, различную символьную информацию
Еще ссылки по теме:

Как вводить символьные переменные C++
C++ Как используя цикл и массивы вводить с клавиатуры фамилии и имена, и затем выводить их на экран?
C++ Как заставить функцию возвращать символьную строку?

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

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
11.04.2012, 09:54     Как вводить в массивы переменные, различную символьную информацию #14
Цитата Сообщение от Siferot Посмотреть сообщение
Почему в массиве находится две размерности? 12 и 10? Так нужно? Ведь месяцев всего 12.
Переменная типа char хранит 1 символ, значит массив char из 12 элементов хранит 12 символов (а не 12 слов). Например:

C++
1
char array[12] = {'a','b','c','d','e','f','g','h','i','j','k','l'}; // массив символов
В твоём случае нужно две размерности, первая - количество слов, вторая - количество символов в каждом слове. Но раз уж это C++, то лучше использовать тип std::string:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main()
{
    int number;
    std::string months[12] = {"January", "February", "March", "April", "May", "June", 
"July", "August", "September", "October", "November", "December"}; // массив строк
    
    std::cout << "Enter number of month(1-12): ";
    std::cin >> number;
 
    std::cout << months[number - 1] << "\n"; // отнимаем 1, т.к. нумерация массивов с 0
}
Правда у тебя задание несколько иное, там речь о временах года
Yandex
Объявления
11.04.2012, 09:54     Как вводить в массивы переменные, различную символьную информацию
Ответ Создать тему
Опции темы

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