понедельник, 17 мая 2010 г.

как поменять элементы массива местами c

как поменять элементы массива местами (Си)

самый простой способ для понимания это представить себе переменную в виде стакана с водой

итого мы имеем 2 стака с жидкостями которые нужно поменять местами (содержимое стакана)

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


int a = 10;
int b = 20;
int temp; //наш третий стакан - посредник

temp = a; //перелили в третий стакан содержимое первого
a = b; //первый у нас освободился? заполняем его содержимым второго
b = temp; //второй освободился? заполняем его содержимым третьего (а там что?)

вот и поменялись...

javascript нахождение суммы цифр числа

javascript нахождение суммы цифр числа

<script>
var n = prompt ("number?", "1234")
var s = 0

while (n > 0)
{
 s += n % 10
 n = Math.floor(n/10)
}

alert("summa: " + s)
</script>

вторник, 11 мая 2010 г.

нерешенные еще проблемы

  • распаковка rar файлов с русскими именами файлами в ubuntu 10.04

понедельник, 10 мая 2010 г.

количество счастливых билетов

Кто возьмет билетов пачку, тот получит водокачку!

Нужно посчитать и вывести на экран количество "счастливых билетов"(к примеру: 111201, 333009 и так далее)

Примечание :

Счастливый билетик имеет вид XXXXXX.

var
    a,b,c,d,e,f: integer;
    g: double;
begin
    g:=0;
    for a:=0 to 9 do
    for b:=0 to 9 do
    for c:=0 to 9 do
    for d:=0 to 9 do
    for e:=0 to 9 do
    for f:=0 to 9 do
    if a+b+c=d+e+f then g:=g+1;
    writeln(g);
end.

PS: обычно я решаю сам, а этот пример подсмотрел - уж очень мне понравилась простота решения, единственное что я добавил - это g - переменная типа double, т.к. результат получается больше чем может представлять пременная типа int, ну и в оригинале было inc - пришлось сдеать g=g+1, ибо inc только для целочисленной математики, еще бы полагалось выводить знаки только до запятой (число то все равно целое), но это уже сами кому надо...

вывести матрицу из файла с++

вывести матрицу из файла с++

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

отмечу только, что раз мы считываем матрицу из файла - то мы заранее
не знаем ее размер, а раз так - то память под неё мы выделяем динамически
с помощью оператора new (не забываем освобождать после использования)

и нужно придумать в каком виде хранить матрицу

создадим текстовый файл matrix.txt
с таким содержанием
2 3
1 2 3
4 5 6

в нем первая строка содержит два числа,
первое - количество строк матрицы, второе кол-во столбцов

#include <stdio.h>

int main(int argc, char * argv[])
{
 int n = 0;
 int m = 0;

 int **a;

 //открываем файл
 FILE * fp = fopen("matrix.txt", "r");
 if (fp)
 {
  //читаем количество строк и столбцов
  fscanf(fp, "%d %d", &n, &m);

  //выделяем место
  *a = new int(n);
  for (int i = 0; i < n; i++) a[i] = new int(m);

  //считываем данные из файла в матрицу
  for (int i = 0; i < n; i++)
  {
   for (int j = 0; j < m; j++)
   {
    fscanf(fp, "%d", &a[i][j]);
   }
  }
  
  //закрываем файл
  fclose(fp);
 }

 //печать матрицы
 for (int i = 0; i < n; i++)
 {
  for (int j = 0; j < m; j++)
  {
   printf("%d ", a[i][j]);
  }

  printf("\n");
 }

 //освобождение памяти
 for (int i = 0; i < n; i++) delete a[i];
 delete *a;


 return 0;
}

и вот вывод программы

1 2 3
4 5 6

перевод чисел из двоичной системы в текст

/* перевод чисел из двоичной системы в текст */

#include <stdio.h>

void main()
{
 int n = 1234;
 int i = 0;
 int m[32];

 printf("10: %d\n", n);

 while (n > 0)
 {
  m[i++] = n & 1;
  n = n >> 1;
 }

 printf(" 2: ");

 for (; i > 0; i--)
 {
  printf("%d", m[i-1]);
 }

 printf("\n");
}

массив состоит из 20 целых положительных и отрицательных чисел. выведите на экран сначала отрицательные, а затем положительные числа.

/* массив состоит из 20 целых положительных и отрицательных чисел.
 выведите на экран сначала отрицательные,
 а затем положительные числа. */

#include <stdio.h>

void main()
{
 int m[] = {1, -2, 3, 4, 5, 6, 7, 8, -9, 10, 11, -12, 13, 14, -15, 16, 17, -18, 19, 20};
 int i;

 printf("отрицательные: ");
 for (i = 0; i < 20; i++)
  if (m[i] < 0)
   printf("%d ", m[i]);

 printf("\n");


 printf("положительные: ");
 for (i = 0; i < 20; i++)
  if (m[i] > 0)
   printf("%d ", m[i]);

 printf("\n");
}

четверг, 6 мая 2010 г.

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

для простоты будем считать что числа только натуральные

function fun(x:integer; summa: integer) : integer;
var
   d, m: integer;
begin
   m := x mod 10;
   d := x div 10;
   if x > 0
   then fun := fun(d, summa + m)
   else fun := summa + m;
end;

begin
   writeln('cумма цифр = ', fun(1234, 0));
end.