Помогите разобраться
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Вы поняли, но не до конца. Когда формируете массив из цифр, то вы формируете его "по одной цифре", а не сразу целиком.
It's a long way to the top if you wanna rock'n'roll
Не понимаю,как это программно реализовать.Создать отдельный массив по типу "а":
numbers.conv=(numbers.num%base)+'0';
a=(numbers.num%base)+'0';
numbers.num=numbers.num/base;

numbers.conv=(numbers.num%base)+'0';
a=(numbers.num%base)+'0';
numbers.num=numbers.num/base;



Какой командой вы запишете в 3-ю позицию массива Conv результат остатка от деления 10/4, например?Не понимаю,как это программно реализовать.Создать отдельный массив по типу "а":
P.S. Сделал задачу без всяких структур: main + ConvertNumber. Все работает, 42 строки всего
Попробуйте реализовать процедуру преобразования числа в троичную строку. Передается два параметра - число и ссылка на строку. Результат работы - строка с терминирующим нулем. Это вроде как не сложно и в этой программе 50% всего кода - это работа этой процедуры.
Внутри нее два цикла - первый вычисляет остатки от деления и сносит их в массив. А во втором обычное переворачивание цифр.
It's a long way to the top if you wanna rock'n'roll
Какой у вас алгоритм?
1. Ввести число
2. Конвертируя, заносить в массив
3.Реверсировать массив
4.Вывести число в таблице
5.Заново с пункта 1
Так?
1. Ввести число
2. Конвертируя, заносить в массив
3.Реверсировать массив
4.Вывести число в таблице
5.Заново с пункта 1
Так?
Не совсем.
1. Ввод всех чисел в массив.
2. Для всех чисел в массиве:
2.1. Конвертировать число из массива в массив цифр
2.1.1 Преобразовать число в массив троичных цифр, используя остаток от деления
2.1.2 Реверсировать массив цифр
2.2. Вывести исходное число и полученный массив цифр на экран
1. Ввод всех чисел в массив.
2. Для всех чисел в массиве:
2.1. Конвертировать число из массива в массив цифр
2.1.1 Преобразовать число в массив троичных цифр, используя остаток от деления
2.1.2 Реверсировать массив цифр
2.2. Вывести исходное число и полученный массив цифр на экран
It's a long way to the top if you wanna rock'n'roll
Может k не хватало?
{
numbers.conv[k]=(numbers.num%base)+'0';
k++;
numbers.num=numbers.num/base;
}
{
numbers.conv[k]=(numbers.num%base)+'0';
k++;
numbers.num=numbers.num/base;
}
Конечно, вы ведь строите этот массив "по кусочкам", по одному символу. Но я все таки советую написать вам основной рабочий код процедуры convertNumber не привязанной к numbers. Вообще, очень плохая практика использовать обращения к глобальным переменным из функций и процедур. Старайтесь делать их независимыми участками программы и вы увидите, что это очень упрощает код, делает его более понятным, читабельным, релоцируемым. Если у вас получится написать convertNumber и реверс в одной процедуре без привязки к основному коду - то так и быть, скину весь свой код целиком.Может k не хватало?
Попробуйте:
Код: Выделить всё
void convertNumber(int num, char *result)
It's a long way to the top if you wanna rock'n'roll
Т.е функция принимает введенное число и второй аргумент-это ссылка на что?что должна передавать,как второй аргумент, функция main, при вызове функции convert. 

Код: Выделить всё
void convertNumber(int num, char *result)
Это ссылка на строку, куда попадет результат работы. Указывается просто название переменной. Например:Т.е функция принимает введенное число и второй аргумент-это ссылка на что?что должна передавать,как второй аргумент, функция main, при вызове функции convert.
Код: Выделить всё
convertNumber(numbers[i], conv);
It's a long way to the top if you wanna rock'n'roll
Вроде программа работает,осталось только реверсировать строку. Возник следующий вопрос: как это сделать?

Я пробовала так делать,вот что получилось:
не забываем реверсировать строку (иными словами развернуть). Самый простой способ, это сначала вычислить её длину, а затем в цикле запустить два счётчика (левый и правый) друг на встречу другу - один от начала строки, другой от её конца (длина-1). На каждом шаге менять местами соответ
Код: Выделить всё
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#define N 200
// структура, хранящая информацию об одном числе
struct NumberInfo
{
long int num; // само число
char conv[42]; // сконвертированное число
}
numbers[N];
// массив структур, хранящий информацию о всех исходных и сконвертированных числах
int i;
void show(int num, char *result,int count);
void convertNumber(int, char *);
int main (void)
{
printf("Number to convert? '0'-end" );
for (i=0;i<N;i++)
{
scanf("%li",&numbers[i].num);
if(numbers[i].num =='\0')
break;
else
convertNumber(numbers[i].num, numbers[i].conv);
}
show(numbers[i].num, numbers[i].conv,i);
return 0;
}
void convertNumber(int num, char *result)
{
int base=3;
int k=0,n;
do
{
numbers[i].conv[k]=(num%base)+'0';
k++;
num=num/base;
}
while(num!=0);
int count=0;
while(result[count]!='\0')
{
count++;
}
char tmp,u,v;
for(u=result[0];u<=v;u++)
for(v=*(result+count);v>=u;v--)
{
u=v;
v=u;
}
}
void show(int num, char *result,int count)
{
int i;
printf("\n\t============================================\n");
printf("\t| | |\n");
for(i=0;i<count;i++)
{
printf("\t| %ld | %s |\n ", numbers[i].num,numbers[i].conv);
}
printf("\t============================================\n");
}