Вопрос по С++

Vitus

аматор
dreamer, спасибо за наводку, сделал так:
#define Test "\x0FF\x0FF\x0FFtest\x0D"
 

Пух

كنت بلهاء
Модератор
как мне перевести число с шестнадцатеричной системы счисления, скажем в десятеричную ?
Вводить, я так понимаю, будем строку (например число 7DA), а как потом её переделать в число.
написал прогу, которая переводит с любой системы (с 2 до 10ти ричной) в любую (проверял на 3,4,5,8,10,16ти ричной, работает), осталось только немного дописать :(
п.с. нужно для С.
 
Останнє редагування:

dreamer

Member
как мне перевести число с шестнадцатеричной системы счисления, скажем в десятеричную ?
Вводить, я так понимаю, будем строку (например число 7DA), а как потом её переделать в число.
написал прогу, которая переводит с любой системы (с 2 до 10ти ричной) в любую (проверял на 3,4,5,8,10,16ти ричной, работает), осталось только немного дописать :(
п.с. нужно для С.
Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работает :)
А вообще .
 

Пух

كنت بلهاء
Модератор
Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работает :)
А вообще .
всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.
сделал так:

Код:
int a[20],i=0;
 char n[20];
 scanf("%s",&n);
 while (n[i]!='\0'){
   switch (n[i]){
      case 'A':a[i]=10;break;
      case 'B':a[i]=11;break;
      case 'C':a[i]=12;break;
      case 'D':a[i]=13;break;
      case 'E':a[i]=14;break;
      case 'F':a[i]=15;break;
   default:a[i]=n[i]-'0';
   }
 i++;
}
 

Cris

Member
всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.
сделал так:

Код:
int a[20],i=0;
 char n[20];
 scanf("%s",&n);
 while (n[i]!='\0'){
   switch (n[i]){
      case 'A':a[i]=10;break;
      case 'B':a[i]=11;break;
      case 'C':a[i]=12;break;
      case 'D':a[i]=13;break;
      case 'E':a[i]=14;break;
      case 'F':a[i]=15;break;
   default:a[i]=n[i]-'0';
   }
 i++;
}
если бы надо было работать только с шестнадцатеричной и десятичной, то надо юзать:
Код:
int x;
scanf("%X",&x); /или %x если буковки маленькие
т.е. мы говорим что нужно считать шестнадцатеричное число

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

Пух

كنت بلهاء
Модератор
если бы надо было работать только с шестнадцатеричной и десятичной, то надо юзать:
Код:
int x;
scanf("%X",&x); /или %x если буковки маленькие
т.е. мы говорим что нужно считать шестнадцатеричное число

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

dreamer

Member
всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.
сделал так:

Код:
int a[20],i=0;
 char n[20];
 scanf("%s",&n);
 while (n[i]!='\0'){
   switch (n[i]){
      case 'A':a[i]=10;break;
      case 'B':a[i]=11;break;
      case 'C':a[i]=12;break;
      case 'D':a[i]=13;break;
      case 'E':a[i]=14;break;
      case 'F':a[i]=15;break;
   default:a[i]=n[i]-'0';
   }
 i++;
}
Все верно, хотя собственно буквы тоже идут последовательно, так что можно делать проще:
Код:
    for (int i = 0; i < strlen(str); i++) {
        if ('9' >= str[i] && str[i] >= '0')
            num[i] = str[i] - '0';
        if ('a' >= str[i] && str[i] >= 'z')
            num[i] = str[i] - 'a' + 10;
        if ('A' >= str[i] && str[i] >= 'Z')
            num[i] = str[i] - 'A' + 10;
    }
 

Пух

كنت بلهاء
Модератор
Как правильно заполнить двумерный массив с помощью функции?

С одномерным массивом вроде всё ясно(кстати, обязательно возвращать указатель на массив?)
Код:
#include <stdio.h>
#include <stdlib.h>
#define N 20

float *input(float *a){
  float *arr=a;
   for (;arr<a+N;arr++)
     *arr=random(10)-5;
  return a;
}

void main(){
 float p[N];
 randomize();
 input(p)
}
а с двумерным не понятно =)

Код:
#include<stdio.h>
#include<stdlib.h>
#define n 2


void input(int arr[][]){
 int i=0, j=0;
  for (;i<n;i++){
     for (;j<n;j++){
       arr[i][j]=random(10)-5;
       printf("%d",arr[i][j]);
     }
  }
}

void main(){
  int a[n][n];
  randomize();
  input(a[n][n]);
}
ошибка в строке "void input(int arr[][])" (size of type is unknown or zero)
 
Код:
#include<stdio.h>
#include<stdlib.h>
#define n 2


void input(int arr[n][n]){
 int i=0, j=0;
  for (;i<n;i++){
     for (;j<n;j++){
       arr[i][j]=random(10)-5;
       printf("%d",arr[i][j]);
     }
  }
}

void main(){
  int a[n][n];
  randomize();
  input(a);
}
так попробуй
 

Пух

كنت بلهاء
Модератор
я и так пробовал...
input(a[n][n]) - cannot convert 'int' to 'int[2] *'
 
Зверху