• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Приглашаем на KubanCTF

    Старт соревнований 14 сентября в 10:00 по москве

    Ссылка на регистрацию в соревнованиях Kuban CTF: kubanctf.ru

    Кодебай является технологическим партнером мероприятия

Помогите найти ошибку

  • Автор темы 9a9z9a
  • Дата начала
9

9a9z9a

Задача состоит в нахождении количества чисел-палиндромов
Вот мой код, он запускается, но нечего не показывает :)

C++:
#include <iostream>
using namespace std;
bool for_pal(int arr[], int sz) // функция для проверки является ли число палиндромом
{
int f;
for(f = 0; f < (sz / 2); f++) 
{
if(arr[f] == arr[sz - 1 - f])continue;
return false;
}
return true;
}
void main()
{
setlocale(LC_ALL, "Rus");
int *arr, kol_vo = 0, sz, g = 0;
int i,j;
int matrix[2][2] = {{777, 404}, {1991, -2091}};
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++) 
{
sz = 0; //начальный размер динамического массива(а так вообще можно? :ya_lamo: )
//пробывал с 1 , та же лажа
arr = new int[sz]; // создаем динамический массив, в который заносим цифры элемента matrix[i][j]
if(!arr) {cout<<"LOL!\n"; return;}
while(matrix[i][j]) //заносит цифры в динамический массив
{
sz++;
arr[g++] = (matrix[i][j] % 10); 
matrix[i][j] /= 10;
}

if(for_pal(arr, sz) == true) kol_vo++; //проверка числа на палиндром

delete[]arr; //удаление динамического массива для создание нового(пустого) для следующего эл-та matrix[i][j]
}
cout<<"Количество чисел-палиндромов : "<<kol_vo<<endl;
}

В любом случае должно выводить хотябы 0, но не выводит нечего.
 
I

ierofant

Интересно, а людям, которые программируют всякие маленькие железки, да т не тольео, в которых самый распоследний компилятор не всунешь, удавиться?
А я-то тут в чём виновен? Уверяю вас, что последние нововедения не так уж сильно повлияли на объём. Да и разговор не об этом..
 
I

ierofant

9a9z9a,
А какую ошибку выдаёт компилятор? И ещё вопрос, тебе обязательно нужен tmp? Может достаточно такого преобразования:
C++:
char S[10] = "1234578";
int p = atoi(S);
 
9

9a9z9a

9a9z9a,
А какую ошибку выдаёт компилятор? И ещё вопрос, тебе обязательно нужен tmp? Может достаточно такого преобразования:
C++:
char S[10] = "1234578";
int p = atoi(S);


ierofant, спасибо. Мне нужно было выделять по одному символу чтобы перевернуть через цикл эту строку и записать в int. Это для создания класса арифметики больших чисел. Но я ведь могу воспользоваться strrev(char*) для инвертирования строки, а потом уже записать в p через atoi(char*). Это в общем случае. Мне же нужно записать в массив эту перевёрнутую строку, т.е. по каждому индексу по одному символу из строки. Тут уже потребуется вытаскивание символа из строки и запись и массив. Как это лучше всего организовать?
 
I

ierofant

Я бы сделал это так:
C++:
#include <string>
#include <algorithm>
#include <cstdlib>

...

std::string str = "12345678";
std::reverse (str.begin (), str.end ());
int p = std::atoi (str.c_str ());
 
D

dreamer

9a9z9a

C++:
char s[10] = "123";
int m=1, sum=0;
size_t i;
for (i = 0; i < strlen(s); ++i, m*=10)
sum+=((int)s[i] - (int)'0') * m;
 
9

9a9z9a

Я бы сделал это так:
C++:
#include <string>
#include <algorithm>
#include <cstdlib>

...

std::string str = "12345678";
std::reverse (str.begin (), str.end ());
int p = std::atoi (str.c_str ());

ierofant, спасибо за совет. Вы пишете на C++ великолепно и компактно,но как научиться писать такой код? Можете посоветовать книгу?
 
I

ierofant

Смотря какие вас аспекты интересуют. Код, который выше, основан на STL по нему я могу порекомендовать книгу:
 
9

9a9z9a

Смотря какие вас аспекты интересуют. Код, который выше, основан на STL по нему я могу порекомендовать книгу:

ierofant, спасибо, почитаю. Какие основы необходимо знать для этой книги? Что вообще требуется для освоения программирования? Я начал изучать программирование месяца 3 назад и хотел бы узнать Ваши и рекомендации других участников форума.
 
I

ierofant

Конкретно, чтобы научится пользоваться STL достаточно знать только основы языка и, в некоторых случаях, уметь делать простые операции с шаблонами. Но и STL-ем тоже всё не исчерпывается. Для крупных (ну и средних) проектов неплохо изучить приёмы ООП.
 
R

Rififi

9a9z9a

 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!