Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2020, 22:47   #1
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
Вопрос Массивы в функции

Добрейшего времени суток, начал практиковаться, решил написать небольшую программку, что бы интерпретировать, например MENU, в красивый заголовок в консоле. Но на начальном этапе словил затуп, не могу подружить массивы и функции, я вроде передаю массив как параметр, в аргументах тоже поакзал, что это массив - всё равно ошибка. Выручайте, где я потерял логику...

#include <iostream>

namespace constH
{
const char headerA[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerB[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerC[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerD[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerE[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerF[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerG[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerH[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerI[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerJ[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerK[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerL[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerM[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerN[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerO[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerP[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerQ[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerR[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerS[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerT[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerU[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerV[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerW[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerX[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerY[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerZ[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
const char headerHelp[5] = { 0x18, 0x24, 0x24, 0x7E, 0x81 };
}

//Получаем букву и заполняем её внешнее отображение в соответствующую часть массива
char updateTextMassive(int i, const char letter[], char newTextMassive[][])
{
for (int j = 0; j < 5; j++)
{
newTextMassive[j][i] |= letter[j];
}
return newTextMassive;
}

//Выводим написанный текст в качестве заголовка для консоли
void outputCharHeader(char textMassiv[], int sizeX)
{
char newTextMassive[5][sizeX];
for (int i = 0; i < sizeX; i++)
{
switch (static_cast<int>(textMassiv[i]))
{
case 65:
updateTextMassive(i, constH::headerA[], newTextMassive);
break;
case 66:
updateTextMassive(i, constH::headerB, newTextMassive);
break;
case 67:
updateTextMassive(i, constH::headerC, newTextMassive);
break;
case 68:
updateTextMassive(i, constH::headerD, newTextMassive);
break;
case 69:
updateTextMassive(i, constH::headerE, newTextMassive);
break;
case 70:
updateTextMassive(i, constH::headerF, newTextMassive);
break;
case 71:
updateTextMassive(i, constH::headerG, newTextMassive);
break;
case 72:
updateTextMassive(i, constH::headerH, newTextMassive);
break;
case 73:
updateTextMassive(i, constH::headerI, newTextMassive);
break;
case 74:
updateTextMassive(i, constH::headerJ, newTextMassive);
break;
case 75:
updateTextMassive(i, constH::headerK, newTextMassive);
break;
case 76:
updateTextMassive(i, constH::headerL, newTextMassive);
break;
case 77:
updateTextMassive(i, constH::headerM, newTextMassive);
break;
case 78:
updateTextMassive(i, constH::headerN, newTextMassive);
break;
case 79:
updateTextMassive(i, constH::headerO, newTextMassive);
break;
case 80:
updateTextMassive(i, constH::headerP, newTextMassive);
break;
case 81:
updateTextMassive(i, constH::headerQ, newTextMassive);
break;
case 82:
updateTextMassive(i, constH::headerR, newTextMassive);
break;
case 83:
updateTextMassive(i, constH::headerS, newTextMassive);
break;
case 84:
updateTextMassive(i, constH::headerT, newTextMassive);
break;
case 85:
updateTextMassive(i, constH::headerU, newTextMassive);
break;
case 86:
updateTextMassive(i, constH::headerV, newTextMassive);
break;
case 87:
updateTextMassive(i, constH::headerW, newTextMassive);
break;
case 88:
updateTextMassive(i, constH::headerX, newTextMassive);
break;
case 89:
updateTextMassive(i, constH::headerY, newTextMassive);
break;
case 90:
updateTextMassive(i, constH::headerZ, newTextMassive);
break;
default: updateTextMassive(i, constH::headerHelp, newTextMassive);
}
}
}

int main()
{
int sizeX{ 10 };
char textMassiv[sizeX];
std::cin >> textMassiv;
outputCharHeader(textMassiv, sizeX);
return 0;
}
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 28.02.2020, 08:45   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от maks1331 Посмотреть сообщение
где я потерял логику
в постановке задачи. Лично я не понимаю, что тут требовалось сделать, ТЗ непонятное

Но телепаты подсказывают, что начало было бы примерно такое

Код:
#include <iostream>
#include <map>
#include <vector>

using td_textarray=std::vector<uint8_t>;
using td_header_map=std::map<char,td_textarray>;

td_header_map _headers
{
	{'A',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'B',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'C',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'D',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'E',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'F',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'G',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'H',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'I',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'J',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'K',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'L',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'M',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'N',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'O',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'P',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'Q',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'R',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'S',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'T',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'U',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'V',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'W',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'X',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'Y',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
	{'Z',{ 0x18, 0x24, 0x24, 0x7E, 0x81 }},
};

const td_textarray headerHelp{ 0x18, 0x24, 0x24, 0x7E, 0x81 };
а вот что означает набор чисел "0x18, 0x24, 0x24, 0x7E, 0x81" - я без понятия
Алексей1153 вне форума Ответить с цитированием
Старый 28.02.2020, 08:48   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

могу предположить, что это растр литеры. Только отчего он везде одинаковый
Код:
00011000
00100100
00100100
01111110
10000001
Алексей1153 вне форума Ответить с цитированием
Старый 28.02.2020, 11:37   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Это что - тренинг телепатов ?
digitalis вне форума Ответить с цитированием
Старый 28.02.2020, 13:49   #5
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Ахахах, нет, а что непонятного? я же написал, не доделал, столкнулся с проблемой.

------

Попытаться скомпилить код на своей стороне это телепаты вам не подсказали? У меня прога не компилится, потому что, что то не так с массивами при передачи в функцию, я не могу допереть.
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 28.02.2020 в 13:51.
maks1331 вне форума Ответить с цитированием
Старый 29.02.2020, 08:40   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

maks1331, компилятор желает знать размерность передаваемого массива. Вот телепаты и подсказывают - используй вектора

либо передавай указатель на первый элемент массива, а далее в аргументах - все нужные размерности

С векторами это всё удобнее и гибче
Алексей1153 вне форума Ответить с цитированием
Старый 09.09.2020, 10:50   #7
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Спасибо всем за ответы. Я пришел к тому, что мой уровень владения языком был слишком низок для решения такой задачи. Т.к. я продолжил изучать язык, сейчас я смог написать эту программу. Всем, кому интересно, выкладываю её код .

т.к. символов больше 8000, заливаю .txt файл.

Буду благодарен за конструктивную оценку и критику кода!
Вложения
Тип файла: txt заголовок для консоли.txt (12.8 Кб, 7 просмотров)
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 09.09.2020, 14:01   #8
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

maks1331,

самое первое, что я сделал бы:
вот это
Код:
namespace letter { // закодированные символы
    const letterArr_t A { 0x30, 0x48, 0x84, 0xFC, 0x84 };
    const letterArr_t B { 0xFC, 0x8C, 0xF8, 0x8C, 0xFC };
...
...
    const letterArr_t Z { 0xFC, 0x08, 0x30, 0xC0, 0xFC };
}
можно заменить на std::unordered_map по принципу из поста №2.
Это позволит также избавиться от дикого свича , заменив его на несколько строк
Алексей1153 вне форума Ответить с цитированием
Старый 11.09.2020, 09:46   #9
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Программа не чистит динамически выделенную память)

Я знаю, что лучше не использовать С-style строки, заменив их std::string. В программе цикл проходит по каждому символу строки + определяет её размер, как это можно улучшить?
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 11.09.2020, 12:56   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от maks1331 Посмотреть сообщение
как это можно улучшить?
Вычислять все во время компиляции.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы, функции, С++ Eddi_Brown Помощь студентам 3 24.03.2014 09:15
Массивы и функции tutty123 Помощь студентам 0 06.12.2012 02:57
Массивы, функции СИ Redbbt Помощь студентам 1 08.10.2012 23:46
С++ массивы и функции. Jenkins Помощь студентам 15 28.02.2012 23:41
Функции и массивы. 3.14rojoke Общие вопросы C/C++ 1 14.04.2010 15:32