Архив метки: c++

Число в строку, строку в число на разных языках.

Преобразование числа в строку и обратной операции на разных языках программирования.

Строку в число

С++

int atoi(const char* str) //для чисел типа integer
long atol(const char* str)//для чисел типа long
double atof(const char* str)//для чисел типа double

 PHP

<?php
$foo = 1 + "10.5";                // $foo это float (11.5)
$foo = 1 + "-1.3e3";              // $foo это float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo это integer (1)
$foo = 1 + "bob3";                // $foo это integer (1)
$foo = 1 + "10 Small Pigs";       // $foo это integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo это float (14.2)
$foo = "10.0 pigs " + 1;          // $foo это float (11)
$foo = "10.0 pigs " + 1.0;        // $foo это float (11)
?>

C#

m = int32.Parse("123456");//из строки целое число

 Javascript

Для явного преобразования можно использовать 2 способа:

var number = Number(string_value);
var number = string_value - 0;

parseInt("3 blind mice"); // Возвращает 3
parseFloat("3.14 meters"); // Возвращает 3.14
parseInt("12.34"); // Возвращает 12
parseInt("0xFF"); // Возвращает 255

Число в строку

С++

char* itoa(int value, char* string, int radix) //для чисел типа integer
char* itoa(long value, char* string, int radix)//для чисел типа long
char* itoa(double value, char* string, int radix)//для чисел типа double

PHP

$name=5;
$string_name = (string)$name;

C#

int a=5;
string s=a.toString();

 Javascript

var string_value = String(number); // Использование конструктора String()
// в качестве функции
var string_value = number + ""; // Конкатенация с пустой строкой

Еще одну возможность предоставляет метод toString():

var n = 17;
string_value = number.toString();

Листинг обработки одномерных массивов

Тема: Обработка одномерных массивов

Задание

Заполнить два массива, размером 20 и 30 элементов, соответственно, случайными целыми числами в диапазоне от –50 до 50. Из полученных двух массивов создайте два массива отдельно отрицательных и положительных чисел. Проведите сортировку полученных массивов по возрастанию. Для контроля результата сделайте распечатку массивов, в том числе исходного.
Сортировки проведите тремя методами. При использовании каждого из методов желательно использовать свой массив. Если количество массивов меньше трех, то один из массивов перед сортировкой надо скопировать в дополнительный массив и провести его сортировку.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define   Nx 20
#define   Ny 30
#define   Nres 50

inline void rus()  // Русификация вывода в консольное окно
{
    setlocale( LC_CTYPE, ".1251" );
    setlocale( LC_MONETARY, ".1251" );
}
void randomize()
{
    srand(time(0));
}

unsigned int random(int range)
{
    return (rand() % range);
}

int main()
{

    int  i, j, range;
    rus();
    randomize();
    int x[Nx];
    int y[Ny];
    int pol[Nres];
    int otr[Nres];
    int pol2[Nres];
    range=100;
   for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      *(x+i) = -50+random(range);
                       }
  // Вывод одномерного массива
  printf("Распечатка массива \n");
  for (i=0; i<Nx; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(x+i)));

   for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      *(y+i) = -50+random(range);
                       }

  // Вывод одномерного массива
  printf("\n Распечатка массива \n");
  for (i=0; i<Ny; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(y+i)));

   for (i=0;i<Nres;i++)  {        /* i - is a namber of row       */
      *(pol+i) = 1000;
      *(otr+i) = -1000;
                         }
// раскидываем массив х
int jpol=0, jotr=0;
for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      if (*(x+i)>0) {*(pol+jpol)=*(x+i);jpol++;}
      if (*(x+i)<0) {*(otr+jotr)=*(x+i);jotr++;}
                    }

// раскидываем массив y

for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      if (*(y+i)>0) {*(pol+jpol)=*(y+i);jpol++;}
      if (*(y+i)<0) {*(otr+jotr)=*(y+i);jotr++;}
                    }

 // Создаем доп массив для сортировки (по заданию)

  for (i=0; i<jpol; i++)  //
   *(pol2+i+1)=*(pol+i);

//сортировка массива pol
if (jpol>=1) {
    for (int j=0; j<jpol-1;j++)
{

    for (int i=0; i<jpol-1;i++)
    {
        if (*(pol+i)>*(pol+i+1))
       {
           int temp = *(pol+i);
           *(pol+i) = *(pol+i+1);
           *(pol+i+1)=temp;
       }
    }
}
           }

//сортировка массива otr
if (jotr>=1) {
  int m,min;
/* Сортировка методом прямого поиска */
  for (i=0;i<jotr-1;i++) /* в переменной i - индекс первого элемента
   массива, то есть массив от d[i] до d[N] */
    {  /* Найти минимум в массиве от i-того до N-ного */
      m=i; min=(*otr+i); /* m-индекс минимума, min-значение минимума */
      for (j=i+1;j<jotr; j++) /* Поиск в оставшейся части массива */
 {
    if (*(otr+j)<min)  /* Найдено новое значение минимума? */
      { min=*(otr+j); m=j; } /* Запомнить минимум и его индекс */
 }
      /* Обменять первый (i-ый) и минимум (m-ый) местами */
      *(otr+m)=*(otr+i); *(otr+i)=min;
    }
}

//сортировка массива pol2
if (jpol>=1) {
           int m=0;
/* Сортировка методом прямого включения */
  for (i=2; i<=jpol; i++) /* в переменной i - индекс включаемого элемента */
    {       /* включение i-того элемента */
      m=i; // Начальное значение индекса цикла включения
      *pol2=*(pol2+i); // Установка барьера
      while (*(pol2+m)<*(pol2+m-1)) // включение
  { //  Обмен с предыдущим элементом местами
      int tmp = *(pol2+m); *(pol2+m) = *(pol2+m-1); *(pol2+m-1)= tmp;
      m--; // включение идет к началу массива
 };
    }; }

  // Вывод одномерного массива
  printf("\n Распечатка массива otr \n");
  for (i=0; i<jotr; i++)  //
    printf("%d ",(*(otr+i)));
    printf("\n Распечатка массива pol \n");
  for (i=0; i<jpol; i++)  //
    printf("%d ",(*(pol+i)));
  printf("\n Распечатка массива pol2 \n");
  for (i=1; i<=jpol; i++)  //
    printf("%d ",(*(pol2+i)));

 return 0;
}

Листинг 2 обработка массивов через функции здесь.

Циклы в С++

Циклы в С++Циклы в С++

В С++ существует несколько способов представления циклов.

В языке существует 3 типа циклов.

1 тип — цикл for

Общий вид:

for (команда-инициализации; условие; выражение ) выполняемая команда

//бесконечный цикл с выходом из него по определенному условию
for ( ; ; ) {
        if ( some_condition )
            break; //выход из цикла если выполняется условия
        // выполняемые команды
    }

Листинг примера с циклом for

//выводим в столбец значения от 0 до 9
for (int i=0; i<10;i++) cout<<i<<"\n";

 2 тип — цикл while

Общий вид:

while (условие == истина) выполняемые команды

Если вычисление условия дает false, цикл останавливается

Листинг примера с циклом while

//выводим в столбец значения от 0 до 9
int i=0;
while (i<10) cout<<i++<<"\n";

 3 тип — цикл do

Общий вид:

do выполняемые команды while (условие==истина)

Если вычисление условия дает false, цикл останавливается

Листинг примера с циклом while

//выводим в столбец значения от 1 до 10
int i=0;
do {cout<<i++<<"\n";} while (i<11);

Пример программы с циклами здесь

Функции в С++

С++Функции в С++

Коды или команды в программе часто объединяются в так  называемые функции. Например, группа команд, необходимых для чтения исходных данных, объединена в функцию readData().  Также  для выполнения оставшихся подзадач обозначим функции sortData(), compactData() и ShowData().

Функция main()

В каждой С++ программе должна быть ровно одна функция с именем main(). Исполнение программы начинается с выполнения первой команды в функции main(), Затем последовательно одна за другой выполняются все дальнейшие команды, и, выполнив последнюю команду функции main(), программа завершает работу.

Любая функция состоит из четырех частей:

  • Тип возвращаемого значения,
  • Имени самой функции,
  • Списка параметров функции (может быть пустой)
  • Сам код функции.

Первые три части составляют прототип функции.

Список параметров заключается в круглые скобки и может содержать ноль или более параметров, разделенных запятыми. Тело функции содержит последовательность исполняемых инструкций и ограничено фигурными скобками.

Пример общего вида функции

void readData() { cout << "Считываем \n"; }

В нашем примере ниже  тело функции main() содержит вызовы функций readData(), sortData(), compactData() и showData(). Последней выполняется инструкция return 0.

Инструкция return

Инструкция return обеспечивает механизм завершения работы функции. Если оператор return сопровождается некоторым значением (в данном примере 0), это значение становится возвращаемым значением функции. Возвращаемое значение 0 говорит об успешном выполнении функции. (В стандарте С++ функция main() возвращает 0 по умолчанию, если оператор return не указан явно.)

Определим наши функции readData(), sortData(), compactData() и showData():

void readData() { cout << "Считываем \n"; }
void sortData() { cout << "Сортируем\n"; }
void compactData() { cout << "Упаковываем\n"; }
void showData() { cout << "Выводим результат\n"; }

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

Листинг примера использования функций

#include<iostream>

void readData() { cout << "Считываем\n"; }
void sortData() { cout << "Сортируем\n"; }
void compactData() { cout << "Упаковываем\n"; }
void showData() { cout << "Выводим резульатат\n"; }
int main()
{
//выводим последовательно функции 
  readData();
  sortData();
  compactData();
  showData();

  return 0; //программа завершилась корректно
}

Работающий пример функций показан тут

В компоненте Edit вводить только цифры

В компоненте Edit набирать только цифры.

Часто возникает необходимость обеспечить в компоненте Edit ввод только цифр (чисел).

Решение:

Надо в событии OnKeyPress для нужного компонента Edit прописать:

if ((Key < '0' || Key > '9') && Key != 8) Key= 0;