Как вывести таблицу в си
Перейти к содержимому

Как вывести таблицу в си

  • автор:

Как вывести структуру в виде таблицы на СИ?

Вот что получается

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

#include "stdafx.h" #include "stdio.h" #include"Windows.h" #include "locale.h" typedef struct < int year; int ussr; int usa; int eng; int fran; >row; row table[5]; #pragma warning (disable : 4996) int _tmain(int argc, _TCHAR* argv[]) < setlocale(LC_ALL, ""); char *nazva[] = < " Годы ", " СССР ", " США ", " Англия ", " Франция " >; printf("Введите данные: "); for (int i = 0; i for (int i = 0; i system("pause"); return 0; > 

Пример

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

Отслеживать
Drunk Withcher
задан 25 ноя 2020 в 17:38
Drunk Withcher Drunk Withcher
21 1 1 серебряный знак 5 5 бронзовых знаков

Задайте ширину для полей вывода. printf(«%10s «, nazva[i]); и так всем. 10 для примера. Можете указать другое значение.

– user361068
25 ноя 2020 в 17:45
Попробовал, стало лучше, но все равно не так как нужно
25 ноя 2020 в 17:53
Что, прям с рамкой?
– user361068
25 ноя 2020 в 17:57
Без рамки, главное чтобы она была такого вида
25 ноя 2020 в 17:59
Шапку (это у вас массив nazva[] ) и строки печатайте в разных циклах.
25 ноя 2020 в 18:00

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

// Здесь, кстати, нужен const const char *nazva[5] = < "Годы", "СССР", "США", "Англия", "Франция" >; // Здесь ввод данных // Выводим шапку таблицы // 5 потому что в nazva лежат 5 строк for (int i = 0; i < 5; i++) < printf("%10s ", nazva[i]); >// Переход на следующую строку printf("\n"); // Выводим данные из массива // ArrSize - количество выводимых структур for (int i = 0; i

Отслеживать
ответ дан 25 ноя 2020 в 18:17
user361068 user361068

помогла константа, но почему-то вывод строк не такой, то есть первый вводимый пользователем элемент(год) выводится в строчку, как и все остальное

25 ноя 2020 в 18:25
Вы вводите сначала года чтоли?
– user361068
25 ноя 2020 в 18:28
вначале вывожу константу, года и все остальное вывожу последовательно
25 ноя 2020 в 18:44
Вы вводите с клавиатуры числа по очереди так: 1928 120 137 94 105 или так: 1928 1940 1950 1955 120?
– user361068
25 ноя 2020 в 18:50
да, сканирую вначале все года, затем данные сср,сша, англии и франции
25 ноя 2020 в 19:06

Cпасибо всем кто пытался помочь в решении моей проблемы. Я его все-таки нашел:

#include "stdafx.h" #include "stdio.h" #include"Windows.h" #include "locale.h" typedef struct < int year, ssr, usa, ang, franz; >dannie; dannie d[5]; #pragma warning (disable : 4996) int _tmain(int argc, _TCHAR* argv) ; int i = 0; printf("Введите года: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].year); >printf("Введите данные СССР: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].ssr); >printf("Введите данные США: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].usa); >printf("Введите данные Англии: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].ang); >printf("Введите данные Франции: "); for (i = 0; i < 5; i++) < scanf("%d", &d[i].franz); >for (i=0;i <5;i++) < printf("%s\t", nazva[i]); >printf("\n"); for (i=0;i <5;i++) < printf("%4d\t", d[i].year); printf("%4d\t", d[i].ssr); printf("%3d\t", d[i].usa); printf("%6d\t", d[i].ang); printf("%7d\t", d[i].franz); printf("\n"); >printf("\n Производится расчет производительности труда. \n"); float tempra=0, temprf=0; float rascheta, raschetf; for (int i = 0; i < 5; i++) < printf("Год:%d, Англия:%d, Франция:%d\n", d[i].year, d[i].ang, d[i].franz); rascheta =(float) d[i+1].ang / d[i].year * 100; raschetf =(float) d[i].franz / d[i].year * 100; if (rascheta >tempra) < tempra = rascheta; printf("Прирост за %d год составляет(Англия): %f\n", d[i].year, tempra); >else < printf("Прироста за %d год не было(Англия)\n", d[i].year); >if (raschetf > temprf) < temprf = raschetf; printf("Прирост за %d год составляет(Франция): %f\n", d[i].year, temprf); >else < printf("Прироста за %d год не было(Франция)\n", d[i].year); >> float raznica; raznica = temprf - tempra; if (raznica < 0) < -raznica; >printf("Разница: %f\n", raznica); printf("Введите процент роста: "); float P; float tempu; int y[5]; scanf("%f", &P); if (P <=0) < printf("Отрицательного процента роста не бывает\n"); >else < for (i=0; i<5;i++) < tempu = d[i + 1].usa / d[i].usa * 100; if (tempu<=P) < printf("В %d году не превышало\n", d[i].year); >> > system("pause"); return 0; > 

Эта работа уже с дополнениями, но суть вывода таблицы заключается в следующем- мы должны спросить каждый элемент таблицы у пользователя в отдельности и занести это в массив структур, как это и было в старой версии, но при этом запоминать не строкой, а переменной массива структур, после чего поэлементно вывести вначале названия таблицы через цикл for, а затем вывести через этот цикл все данные, главное это указать сколько места они будут занимать(К примеру, Года, 4 буквы, то есть когда выводим таблицу вначале выводим заголовок, а после этого тоже в цикле for printf(«%4d», d[i].year); но цикл этим не заканчивается, продолжаем так для всех данных, а затем в конце с новой строки, иначе все данные пойдут строчкой). Еще раз хочу всем сказать огромное спасибо, без вашей помощи я бы не справился)))

Алгоритм для таблицы истинности

Подскажите алгоритм на си или с++ для составления таблицы истинности.Вводится n-число переменных,2^n значений функции,и необходимо вывести таблицу истинности.Т.е. я не могу составить алгоритм для вывода нулей и единиц в таблицу истинности

5 ответов

07 декабря 2005 года
1.9K / / 06.09.2004

Originally posted by yudinetz
Подскажите алгоритм на си или с++ для составления таблицы истинности.Вводится n-число переменных,2^n значений функции,и необходимо вывести таблицу истинности.Т.е. я не могу составить алгоритм для вывода нулей и единиц в таблицу истинности

Что-то я тоже ничего не могу понять после такого изложения задачи. Может дашь формулу, по которой эту таблицу строить?

07 декабря 2005 года
885 / / 18.04.2005

Originally posted by pacific_7
Что-то я тоже ничего не могу понять после такого изложения задачи. Может дашь формулу, по которой эту таблицу строить?

На самом деле таблица истинности известно что такое.
Это таблица всех вариантов для каждого побитового оператора.
К приимеру

|——AND——|
| A | B |Result|
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |

|——OR——|
| A | B |Result|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |

|——XOR——|
| A | B |Result|
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 0 |

Таблица в консоли

Привет. Какая-то либа, которая позволит без гемора выводить в консоль таблицы заполнив некоторый двухмерный массив. С автопереносом линий в колонке, если не вмещается целиком. Что это?

pavlick ★★
20.10.20 09:57:35 MSK
1 2 →
anonymous
( 20.10.20 10:00:34 MSK )
Ответ на: комментарий от anonymous 20.10.20 10:00:34 MSK

Думал есть что попроще. ncurces слишком много умеет при взгляде со стороны. На крайняк буду разбираться с ней.

pavlick ★★
( 20.10.20 10:11:06 MSK ) автор топика

мне кажется с termbox это будет легче сделать чем с ncurses

anonymous
( 20.10.20 10:19:48 MSK )
BRE ★★
( 20.10.20 10:38:48 MSK )

Тебе нужно именно выводить, без редактирования? Тогда нкурсесы не нужны. Нужен инструмент, который твои таблицы переформатирует под заданные ширины столбцов. А вывод после этого можно делать обычным printf().

hobbit ★★★★★
( 20.10.20 10:41:15 MSK )
Ответ на: комментарий от BRE 20.10.20 10:38:48 MSK

Выглядит перспективно, покручу. А то глянул на ncurces, там, блин, запаришься разбираться.

pavlick ★★
( 20.10.20 10:46:13 MSK ) автор топика
Последнее исправление: pavlick 20.10.20 10:51:18 MSK (всего исправлений: 1)

Ответ на: комментарий от hobbit 20.10.20 10:41:15 MSK

Да, просто вкинуть в некий черный ящик текст полей, и напечатать автоматом отформатированную таблицу в консоль.

pavlick ★★
( 20.10.20 10:47:33 MSK ) автор топика

beastie ★★★★★
( 20.10.20 11:01:21 MSK )

Ребят, спасибо за варианты. FTXUI должна подойти идеально, думаю. Пока еще не разбирался плотно, скоро начну.

pavlick ★★
( 20.10.20 11:12:12 MSK ) автор топика

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

peregrine ★★★★★
( 20.10.20 14:12:15 MSK )
Последнее исправление: peregrine 20.10.20 14:13:44 MSK (всего исправлений: 1)

Ответ на: комментарий от peregrine 20.10.20 14:12:15 MSK

Кодировать символы вчаром? В той либе так и поступают.

pavlick ★★
( 20.10.20 15:25:23 MSK ) автор топика
Ответ на: комментарий от peregrine 20.10.20 14:12:15 MSK

Всё с этим нормально. Много лет не видел разъезжающихся столбцов в терминале.

Конечно, у меня не на всех алфавитах мира встречаются названия файлов. Но для большинства случаев всё работает.

wandrien ★★
( 20.10.20 15:28:05 MSK )
Ответ на: комментарий от wandrien 20.10.20 15:28:05 MSK

Как разраб говорю что не нормально. То что ты не встречал, не значит что этого нет. Ты просто не пишешь на традиционных языках индии.

peregrine ★★★★★
( 20.10.20 16:29:03 MSK )
Ответ на: комментарий от pavlick 20.10.20 15:25:23 MSK

Я тебя разочарую, но некоторые символы не влезают в wchar и кодируются несколькими wchar’ами. wchar вообще жертва аборта.

PPP328 ★★★★★
( 20.10.20 16:36:48 MSK )
Ответ на: комментарий от peregrine 20.10.20 16:29:03 MSK

Ты просто не пишешь на традиционных языках индии.

Хм, а их вообще реально засунуть в терминал? Какое там направление письма?

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

wandrien ★★
( 20.10.20 16:37:25 MSK )
Ответ на: комментарий от PPP328 20.10.20 16:36:48 MSK

У мелкомягких? Это их проблемы, мне как-то все равно, должно влезать.

pavlick ★★
( 20.10.20 16:45:59 MSK ) автор топика
Ответ на: комментарий от pavlick 20.10.20 16:45:59 MSK

У мелкомягких? Это их проблемы, мне как-то все равно, должно влезать.

А теперь подумай, почему флаг это один видимый «символ», а gcc говорит, что это 4 символа в строке…

fsb4000 ★★★★★
( 20.10.20 16:52:36 MSK )
Последнее исправление: fsb4000 20.10.20 16:52:51 MSK (всего исправлений: 1)

Ответ на: комментарий от peregrine 20.10.20 14:12:15 MSK

Вроде в Unicode это всё стандартизировано, и терминалы должны следовать этому же стандарту…

fsb4000 ★★★★★
( 20.10.20 17:07:10 MSK )
Ответ на: комментарий от fsb4000 20.10.20 17:07:10 MSK

〄 ну например, это один символ, не 2, но по ширине должны быть как 2, правда мне лениво другой символ искать, взял первый из гугла, ещё надо убедиться, что й и й адекватно обрабатываются твоей библиотекой и строка из йййййййййй и йййййййййй это 10 букв, а не 10 и 20. Кстати гнутые утилиты (из coreutils) в это не умеют, они даже в кириллицу не умеют, тот же column обрабатывает unicode как ASCII

peregrine ★★★★★
( 20.10.20 17:24:00 MSK )
Последнее исправление: peregrine 20.10.20 17:25:58 MSK (всего исправлений: 2)

Ответ на: комментарий от fsb4000 20.10.20 16:52:36 MSK

Что-ты меня конкретно озадачил … Как это так получилось, что для кодировки 150К символов не хватает 4 байт.

pavlick ★★
( 20.10.20 17:26:41 MSK ) автор топика
Ответ на: комментарий от pavlick 20.10.20 16:45:59 MSK

Конечно нет. Добро пожаловать в мир графемных кластеров.

peregrine ★★★★★
( 20.10.20 17:27:57 MSK )
Ответ на: комментарий от pavlick 20.10.20 17:26:41 MSK

Как это так получилось, что для кодировки 150К символов не хватает 4 байт.

А там ещё свободных полно, но чтобы их меньше расходовалось, придумали модификаторы.

Как вывести таблицу в си

Сообщений: 13

Вычислить и вывести таблицу на C++

Вычислить и вывестина экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. сшагом dX.

 | 1/ax-b при х+50 и с!=0 |10x/c-4 в остальных случаях

где a,b,c — действительные числа.
Функция F должна принимать действительное значение, если выражение (Ац И Вц) ИЛИ (Вц И Сц) не равно нулю, и целое значение в противном случае. Через Ац,Вц и Сц обозначены целые части значений a,b,c операции И и ИЛИ — поразрядные. Значения a,b,c Xнач., Xкон., dX ввести с клавиатуры.

Последний раз редактировалось MrRifleman; 25.03.2012 в 11:48 .

MrRifleman
Посмотреть профиль
Найти ещё сообщения от MrRifleman

Пользователь

Регистрация: 24.03.2012

Сообщений: 13

Есть такой вот код, не могу найти ошибку!

#include #include #include using namespace std; int main() < float Xn, Xk, dX, a, b, c, F; cout>Xn>> Xk>> dX>> a>> b>> F; printf("------------------------------------\n"); printf("| X | Y |\n"); printf("------------------------------------\n"); for ( float x = Xn; x 0 && c!=0) F=(x-a)/x; else F=(10*x)/(c-4); F=~((int)a | (int)b) & ((int)b | (int)c); if (F==0) printf("|%9.2f |%9.0d |\n" ,x,(int)F); else printf("|%9.2f |%9.2f |\n" ,x,F); > printf("-----------------------------------\n"); cout
MrRifleman
Посмотреть профиль
Найти ещё сообщения от MrRifleman

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *