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

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

Войти
Регистрация
Восстановить пароль
 
Sivilan
6 / 6 / 0
Регистрация: 17.03.2013
Сообщений: 66
#1

Массивы (не вводится полностью матрица с буквами A и B) - C++

20.09.2013, 01:36. Просмотров 367. Ответов 4
Метки нет (Все метки)

У меня не вводится полностью матрица с буквами A и B,к примеру создав матрицу 5 на 6,я всего ввожу 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
#include <stdio.h>
#include <conio.h>
 
int main () {
   int w,h,d;
    printf(" Vvedite w pri uslovii w>=1\n");
    scanf ("%d",&w);
    printf(" Vvedite h pri uslovii h<=100\n");
    scanf ("%d",&h);
    char **mas;
    mas = new char *[w];
    for (int i = 0; i < w; i++)
        mas[i] = new char [h];
   printf ("Oboznach'te territoriyu gosudarstv bykvami A i B \n");
    for (int i = 0; i < w; i++) {
        for (int j = 0; j < h; j++)
         scanf ("%c", &mas[i][j]);
    }
    d=0;
   for (int i = 0; i < w; i++) {
        for (int j = 0; j < h; j++)
    { if (j > 0){
        if (mas[i][j] != mas[i][j-1])
        {d++;}}
        if (i>0){
        if (mas[i][j] != mas [i-1][j])
        {
            d++;}}
 
        }
 
 
    }
printf("d=%d",d);
 
    delete [] mas;
    getch();
    return 0;
}
к примеру входные данные:
5-w 6-h
AAABB
ABBBB
AAABB
AAAAB
AAAAB
AABBB
выходные-13
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 01:36     Массивы (не вводится полностью матрица с буквами A и B)
Посмотрите здесь:

C++ Вводится матрица...
Массивы, матрица C++
C++ [Массивы] Матрица 5х5 С++
[C++] Массивы и матрица C++
Массивы и матрица C++
Многомерные массивы. Матрица. C++
C++ С клавиатуры вводится размерность целочисленной матрицы, затем сама матрица
Содержимое матрицы размерности n x n повернуть на 90 по часовой стрелке вокруг центра симметрии матрицы. Исходная матрица вводится из файла C++
C++ Дана квадратная матрица. Найти минимальный из элементов на главной диагонали. Поменять местами с максимальным для столбца n, где n вводится с клави
С клавиатуры вводится размер матрицы и сама матрица. Найти в матрице строку с максимальной суммой и отсортиров C++
Матрица B, содержащая целые числа, вводится с клавиатуры C++
Динамическая матрица, размерность вводится с клавиатуры, обнулить элементы стоящие на главной и ниже C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 08:28     Массивы (не вводится полностью матрица с буквами A и B) #2
Ты так и вводишь:
5-w
?
После каждой введенной буквы надо нажимать Enter.
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
20.09.2013, 08:49     Массивы (не вводится полностью матрица с буквами A и B) #3
Sivilan, у меня этот код работает, но последняя строка не вводится. Проблема в том, что ты не учитвыешь, что строки в С заканчиваются символом \0. Получается, что у тебя при 5-w 6-h можно ввести только 5 строк, потому что вместо строки AAABB у тебя вводится строка AAABB и завершающий ноль, который к тому же записывается в элемент mas[1][0]. Дальше соответственно у тебя всё смещается и получается, что при пяти строках твой ввод уже отработал, потому что в 5 строках у тебя получается 30 элементов.
Теперь, я думаю, понятно, что надо сделать, чтоб всё работало. Нужно инициализировать строки с запасом на завершающий ноль, т. е.
C++
1
mas[i] = new char [h+1];
и чуток исправить вложенный цикл ввода
C++
1
for (int j = 0; j <= h; j++)
Sivilan
6 / 6 / 0
Регистрация: 17.03.2013
Сообщений: 66
20.09.2013, 09:31  [ТС]     Массивы (не вводится полностью матрица с буквами A и B) #4
lipnev, То есть сделать так
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
#include <stdio.h>
#include <conio.h>
 
int main () {
   int w,h,d;
    printf(" Vvedite w pri uslovii h<=100\n");
    scanf ("%d",&h);
    printf(" Vvedite h pri uslovii w>=1\n");
    scanf ("%d",&w);
    char **mas;
    mas = new char *[h+1];
    for (int i = 0; i < h; i++)
        mas[i] = new char [w];
   printf ("Oboznach'te territoriyu gosudarstv bykvami A i B \n");
    for (int i = 0; i < h+1; i++) {
        for (int j = 0; j < w; j++)
         scanf ("%c", &mas[i][j]);
    }
    d=0;
   for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++)
    { if (j > 0){
        if (mas[i][j] != mas[i][j-1])
        {d++;}}
        if (i>0){
        if (mas[i][j] != mas [i-1][j])
        {
            d++;}}
 
        }
 
 
    }
printf("d=%d",d);
 
    delete [] mas;
    getch();
    return 0;
}
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
20.09.2013, 09:50     Массивы (не вводится полностью матрица с буквами A и B) #5
Да.
Yandex
Объявления
20.09.2013, 09:50     Массивы (не вводится полностью матрица с буквами A и B)
Ответ Создать тему
Опции темы

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